我正在玩这个Code First example实体框架,我遇到了一个我不明白的问题。假设POCO对象和数据库上下文与示例中的相同,并且我在应用程序的入口点中有以下代码:
var blog = new Blog { Name = "My Blog" };
var post = new Post {Title = "A Random Post", Blog = blog};
blog.Posts = new List<Post> {post};
db.Blogs.Add(blog);
var blog2 = new Blog {Name = "Another Blog", Posts = new List<Post> {post}};
db.Blogs.Add(blog2);
db.SaveChanges();
// Display all Blogs from the database
var query = from b in db.Blogs
orderby b.Name
select b;
Console.WriteLine("All blogs in the database:");
foreach (var item in query)
{
Console.WriteLine(item.Name);
foreach (var p in item.Posts)
{
Console.WriteLine(p.Title);
}
}
为什么这两个博客中引用的帖子只出现在第二个博客中?每次向数据库添加内容时,是否必须调用SaveChanges
?
答案 0 :(得分:5)
帖子只能属于一个博客。通过将其添加到第二个博客的帖子列表中,对第一个博客的引用将被覆盖。
答案 1 :(得分:1)
您的Blog和Post实体似乎有多对多的关系。您是否在DbContext中配置了这种关系?
此处示例: EF Code First working with many-to-many relationships
如果多数对多不是你的意图,那么请参阅Kristof的回答。