[英]Entity Framework Core insert data in reference table many-to-many relationship with foreign key
所以得到了两个表Book
和Category
然后另一个表名BookCategory
,它与其他两个表都有关系,一切正常,只是在尝试使用引用表插入数据时出现问题。
public class Book
{
public int BookId { get; set; }
public string Title { get; set; }
public Author Author { get; set; }
public ICollection<BookCategory> BookCategories { get; set; }
}
public class Category
{
public int CategoryId { get; set; }
public string CategoryName { get; set; }
public ICollection<BookCategory> BookCategories { get; set; }
}
public class BookCategory
{
public int BookId { get; set; }
public Book Book { get; set; }
public int CategoryId { get; set; }
public Category Category { get; set; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<BookCategory>()
.HasKey(bc => new { bc.BookId, bc.CategoryId });
modelBuilder.Entity<BookCategory>()
.HasOne(bc => bc.Book)
.WithMany(b => b.BookCategories)
.HasForeignKey(bc => bc.BookId);
modelBuilder.Entity<BookCategory>()
.HasOne(bc => bc.Category)
.WithMany(c => c.BookCategories)
.HasForeignKey(bc => bc.CategoryId);
}
public class SampleContext : DbContext
{
public DbSet<Book> Books { get; set; }
public DbSet<Category> Categories { get; set; }
public DbSet<BookCategory> BookCategories { get; set; }
}
假设我在对象_book
detail 中有关于这本书的数据,并且在_cat
中有引用它的类别的 id
如果我这样做,它将保存表格中的所有书籍信息
_context.Add(_book);
await _context.SaveChangesAsync();
但问题是我想更新参考表以及引用它的书和 2 个类别。
我可以使用这个,但这不是正确的方法,任何人都可以帮助我或分享一篇文章的链接,该文章一次性将数据保存在表格中,如您所见,我确定它会出错,因为 bookid 不是生成了谢谢
var z = new BookCategory();
z.BookId = _contextPosts.dbcontext.book.Where(c => c.Id == item).FirstOrDefault().Id;
z.CategoryId = CategoryId.Id;
z.Book = _contextBook.dbcontext.book.Where(c => c.Id == item).FirstOrDefault();
z.Category= Category;
tag.Post.Add(z);
_context.Add(_book);
await _context.SaveChangesAsync();
我可能误解了您要执行的操作,但是您应该能够仅使用一本书进行添加,并且它与 BookCategory 对象相关——假设您尝试添加到书中的类别已经存在(并且您知道它们的身份证)。
创建您的对象和相关的 BookCategories:
var _book = new Book { Title = "My Title",
Author = new Author { whatever },
BookCategories = new List<BookCategory> {
new BookCategory { CategoryId = whateverCatId1 },
new BookCategory { CategoryId = whateverCatId2 }
}
};
_context.Books.Add(_book);
await _context.SaveChangesAsync();
这应该使用正确的 BookId 创建您的图书和关联的 BookCategory 条目。 EF 会先创建 Book 对象,获取其 ID,然后在链接表中填写 BookId。 Add 方法处理整个图形。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.