Asp.net mvc Web API中多对多关系的.NET核心POST请求问题
我正在使用EntityFrameworkCore在.NET Core中制作Web API。我正在尝试向表写入POST请求,它实现了多对多关系,如下所示:Asp.net mvc Web API中多对多关系的.NET核心POST请求问题,asp.net-mvc,asp.net-core,asp.net-web-api,entity-framework-core,asp.net-core-webapi,Asp.net Mvc,Asp.net Core,Asp.net Web Api,Entity Framework Core,Asp.net Core Webapi,我正在使用EntityFrameworkCore在.NET Core中制作Web API。我正在尝试向表写入POST请求,它实现了多对多关系,如下所示: public class Agency { public Guid Id { get; set; } public string Name { get; set; } public IList<Book> Books { get; set; } } public c
public class Agency
{
public Guid Id { get; set; }
public string Name { get; set; }
public IList<Book> Books { get; set; }
}
public class Author
{
public Guid Id { get; set; }
public string Name { get; set; }
public IList<Book> Books { get; set; }
}
public class Book
{
public Guid AgencyId { get; set; }
public Guid AuthorId { get; set; }
public string Title { get; set; }
public string Language { get; set; }
public int Pages { get; set; }
public Agency Agency { get; set; }
public Author Author { get; set; }
}
public class DataContext : DbContext
{
public DataContext(DbContextOptions<DataContext> options)
: base(options) { }
public DbSet<Book> Books { get; set; }
public DbSet<Agency> Agencies { get; set; }
public DbSet<Author> Authors { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Book>().HasKey(b => new { b.AgencyId, b.AuthorId});
modelBuilder.Entity<Book>()
.HasOne<Agency>(b => b.Agency)
.WithMany(a => a.Books)
.HasForeignKey(b => b.AgencyId);
modelBuilder.Entity<Book>()
.HasOne<Author>(b => b.Author)
.WithMany(a => a.Books)
.HasForeignKey(b => b.AuthorId);
}
}
当我提出这个请求时,我得到了数据复制异常。我需要做哪些更改才能使其正常工作?如果在保存方法期间发生异常,请确保新添加的图书数据的
代理ID
和作者ID
不会与以前的数据同时重复
因为您在OnModelCreating中将AgencyId和AuthorId组合的主键设置为Books表
public IActionResult Post(Book model)
{
if (!ModelState.IsValid)
{
return BadRequest("Invalid data.");
}
var book = new Book();
book.Title = model.Title;
book.Language = model.Language;
book.Pages = model.Pages;
book.Author = _repoWrapper.Author.FindByCondition(a => a.Id == model.AuthorId).FirstOrDefault();
book.Agency = _repoWrapper.Agency.FindByCondition(a => a.Id == model.AgencyId).FirstOrDefault();
_repoWrapper.Book.Create(book);
_repoWrapper.Save();
return Ok();
}