.Net核心实体框架无法添加http put方法

问题描述

Prject.csproj,提供以下几行:

DB2DataSource.setSpecialRegisters

我正在使用此模型:

    <Project Sdk="Microsoft.NET.Sdk.Web">
      <PropertyGroup>
        <TargetFramework>netcoreapp3.0</TargetFramework>
     </PropertyGroup>
     <ItemGroup>
        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.1"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.0.0"/>
        <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="5.6.0"/>
        <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="5.6.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.0.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.0.0"/>
        <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="7.0.0"/>
        <PackageReference Include="CloudinaryDotNet" Version="1.8.0"/>
        <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="3.1.1"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="3.1.0"/>
        <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.0.0"/>
        <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.1"/>
     </ItemGroup>
   </Project> 

在使用EntityFramework的情况下,DataContext.cs中的设计方式如下:

namespace Amaz.API.Models
{
    public class Cosa
    {
        public int Id {get; set;}
        public int UserId {get; set;}
        public string descripcion {get; set;}
    }
}

控制器是:

using Amaz.API.Models;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;

namespace Amaz.API.Data
{
    public class DataContext : IdentityDbContext<User,Role,int,IdentityUserClaim<int>,UserRole,IdentityUserLogin<int>,IdentityRoleClaim<int>,IdentityUserToken<int>>
    {
        public DataContext(DbContextOptions<DataContext> options) : base(options) {}

        public DbSet<Value> Values { get; set; }
        public DbSet<Photo> Photos { get; set; }
        public DbSet<Like> Likes { get; set; }
        public DbSet<Message> Messages { get; set; }
        public DbSet<Familiar> Familiars { get; set; }
        public DbSet<Situation> Situations { get; set; }

        public DbSet<Cosa> Cosas { get; set; }


          protected override void OnModelCreating(ModelBuilder builder)
         {
             base.OnModelCreating(builder);

             builder.Entity<UserRole>(userRole =>
             {
                 userRole.HasKey(ur => new {ur.UserId,ur.RoleId});

                 userRole.HasOne(ur => ur.Role)
                    .WithMany(r => r.UserRoles)
                    .HasForeignKey(ur => ur.RoleId)
                    .IsRequired();

                 userRole.HasOne(ur => ur.User)
                    .WithMany(r => r.UserRoles)
                    .HasForeignKey(ur => ur.UserId)
                    .IsRequired();   
             });

             builder.Entity<Like>()
                 .HasKey(k => new {k.LikerId,k.LikeeId});

              builder.Entity<Like>()
                 .HasOne(u => u.Likee)
                 .WithMany(u => u.Likers)
                 .HasForeignKey(u => u.LikeeId)
                 .OnDelete(DeleteBehavior.Restrict);

              builder.Entity<Like>()
                 .HasOne(u => u.Liker)
                 .WithMany(u => u.Likees)
                 .HasForeignKey(u => u.LikerId)
                 .OnDelete(DeleteBehavior.Restrict);

             builder.Entity<Message>()
                 .HasOne(u => u.Sender)
                 .WithMany(m => m.MessagesSent)
                 .OnDelete(DeleteBehavior.Restrict);

              builder.Entity<Message>()
                 .HasOne(u => u.Recipient)
                 .WithMany(m => m.MessagesReceived)
                 .OnDelete(DeleteBehavior.Restrict);
               
              builder.Entity<Photo>().HasQueryFilter(p => p.IsApproved);

              builder.Entity<Familiar>() 
                 .HasOne(u => u.Users)
                 .WithMany(m => m.Familiars)
                 .OnDelete(DeleteBehavior.Restrict); 
                         
              builder.Entity<Situation>(); 

              builder.Entity<Cosa>();
                
         }
    }
}

但是主要问题是无法通过此“ PutCosa”方法向数据库添加新的寄存器。正如在邮递员中测试的那样:

Postman screen capture here:

这里可能会发生什么以及如何解决?

解决方法

在EF中,您实际上需要将更改保存在上下文中,以便EF将更改保存到数据库中。在这里https://docs.microsoft.com/en-us/ef/core/saving/basic

        [HttpPost]
        public async Task<IActionResult> PutCosa(CosaDto CosaDto)
        {
            var CosaToCreate = _mapper.Map<Cosa>(CosaDto);
            _repo.Add(CosaToCreate);
            _repo.SaveChanges();
            return NoContent();
        }

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...