Я делаю Web API в. NET Core, используя EntityFrameworkCore. Я пытаюсь записать POST-запрос к таблице, который реализует отношение «многие ко многим», это выглядит так:
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);
}
}
Я написал репозиторий и оболочку для него, он работает нормально, но я возникли проблемы с объектом POST for Book:
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();
}
Когда я делаю этот запрос, я получаю исключение дублирования данных. Что мне нужно изменить, чтобы все заработало?