繁体   English   中英

Entity Framework Core 在引用表中插入数据与外键的多对多关系

[英]Entity Framework Core insert data in reference table many-to-many relationship with foreign key

所以得到了两个表BookCategory然后另一个表名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 方法处理整个图形。

        var _Tag = new Tag
        {
            Name = tag.Name,

            Post = new List<PostTag> {
                  new PostTag { PostId = 1 },
                  new PostTag { PostId = 2 }
               }
        };

        tag.Post = _Tag.Post;


        _contextTags.dbcontext.Add(tag);
        tag.ModifiyDate = DateTime.Now;
        tag.CretedDate = DateTime.Now;

        await _contextTags.dbcontext.SaveChangesAsync();

获取错误

在此处输入图片说明

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM