实体框架在不同的集合中多次引用同一对象

本文关键字:引用 对象 集合 框架 实体 | 更新日期: 2023-09-27 18:18:08

我只是在玩这个代码第一实体框架的例子,我遇到了一个问题,我不明白。假设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吗?

实体框架在不同的集合中多次引用同一对象

一篇文章只能属于一个博客。通过将其添加到第二个博客的帖子列表中,对第一个博客的引用将被覆盖。

您的Blog和Post实体似乎具有多对多关系。您是否在DbContext中配置了此关系?

的例子:EF Code首先处理多对多关系

如果多对多不是你的意图,那么看看Kristof的回答