要求实体框架在添加新实体之前不要检索相关实体列表

Posted

技术标签:

【中文标题】要求实体框架在添加新实体之前不要检索相关实体列表【英文标题】:Asking Entity Framework not to retrieve list of related entities before adding a new one to it 【发布时间】:2011-11-29 05:22:51 【问题描述】:

两种场景:

我有 XML 格式的 Nodes 和 NodeDetails。我循环浏览文档,创建新的 Node 实体,然后将 NodeDetails 添加到其中,然后通过调用 db.SaveChanges() 将它们保存在一起。当我跟踪调用时,我看到的只是一堆插入语句:首先是 Node,然后是 NodeDetails。

在第二种情况下,我有 Posts 和 PostDetails。帖子已经存储在数据库中。所以我检索了一个帖子,分析它,将 PostDetails 添加到它,然后保存。当我跟踪调用时,我看到从 PostDetails 表中选择此 Post,然后我看到插入。当我到达post.PostDetails.Add(newPostDetail);

的语句时,会出现选择部分

现在,我确实理解这里的推理,但我想以某种方式覆盖它。有没有办法告诉 EF 在插入之前不要检索列表?

【问题讨论】:

【参考方案1】:

当您调用 post.PostDetails.Add(newPostDetail) 方法时,EF 已加载 PostDetails 集合。当您第一次访问该属性时,EF 会执行此延迟加载。这会导致发出select 语句。

如果您是第一次向集合中添加元素,则可以避免这种情况。

post.PostDetails = new List<PostDetail>();
post.PostDetails.Add(newPostDetail);

或者您可以直接将新的PostDetail 添加到上下文而不将其添加到集合中。

var postDetail = new PostDetail Post = post ;
//populate other properties
db.PostDetails.Add(postDetail);

【讨论】:

以上是关于要求实体框架在添加新实体之前不要检索相关实体列表的主要内容,如果未能解决你的问题,请参考以下文章

防止在实体框架中的相关表实体上添加新记录

WAF(WPF 应用程序框架)添加新的实体表

实体框架:新对象的状态值

如何使用实体框架检索插入实体的 ID? [关闭]

相关实体的子查询的 HQL 错误

添加新实体标量时实体框架 4 映射片段错误