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();