问题描述
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”方法向数据库添加新的寄存器。正如在邮递员中测试的那样:
这里可能会发生什么以及如何解决?
解决方法
在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();
}