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

时间:2011-11-29 05:22:52

标签: entity-framework-4.1 entity-relationship

两种情况:

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

在第二个场景中,我有Posts和PostDetails。帖子已存储在数据库中。所以我检索一个帖子,分析它,添加PostDetails,然后保存。当我跟踪调用时,我看到Post的PostDetails表中的select,然后我看到插入。当我到达一个说post.PostDetails.Add(newPostDetail);

的陈述时,就会出现选择部分

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

1 个答案:

答案 0 :(得分:0)

当您致电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);