Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架核心在引用表中插入数据与外键的多对多关系_C#_Entity Framework Core_Asp.net Core Mvc - Fatal编程技术网

C# 实体框架核心在引用表中插入数据与外键的多对多关系

C# 实体框架核心在引用表中插入数据与外键的多对多关系,c#,entity-framework-core,asp.net-core-mvc,C#,Entity Framework Core,Asp.net Core Mvc,因此得到了两个表Book和Category,然后是另一个表名BookCategory,它与其他两个表都有关系,一切正常,只是在尝试向引用的表插入数据时出现了问题 public class Book { public int BookId { get; set; } public string Title { get; set; } public Author Author { get; set; } public ICollection<BookCatego

因此得到了两个表
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; }
}
但问题是,我想用这本书和引用它的两个类别来更新参考表

我可以使用这个,但这不是正确的方法。任何人都可以帮助我或共享一篇文章的链接,该文章正在一次性将数据保存在表中,正如您所看到的,我确信它将给出一个错误,因为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对象进行添加——假设您试图添加到该书中的类别已经存在(并且您知道它们的ID)

创建对象和相关图书类别:

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();
var\u book=新书{Title=“我的书名”,
作者=新作者{随便什么},
BookCategories=新列表{
新图书类别{CategoryId=whateverCatId1},
新图书类别{CategoryId=whateverCatId2}
}
};
_context.Books.Add(_book);
wait_context.SaveChangesAsync();
这将使用正确的BookId创建您的书籍和关联的BookCategory条目。EF将首先创建Book对象,获取其ID,然后在链接表中填写BookId。Add方法处理整个图形。

var\u Tag=new Tag
        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();
{ Name=tag.Name, Post=新列表{ 新的PostTag{PostId=1}, 新的PostTag{PostId=2} } }; tag.Post=_tag.Post; _添加(标记); tag.ModifiyDate=DateTime.Now; tag.CretedDate=DateTime.Now; wait_contextTags.dbcontext.SaveChangesAsync();
错误获取


谢谢@bryan,但问题如此复杂,逻辑让我告诉你们,这段代码有点混乱。引用“tag”并创建变量/对象“\u tag”。“tag”是从哪里来的,因为它是您实际添加的?“_contextTags”是DbContext对象吗?
        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();