Entity framework 4.1 请求实体框架在向其添加新实体之前不检索相关实体列表

Entity framework 4.1 请求实体框架在向其添加新实体之前不检索相关实体列表,entity-framework-4.1,entity-relationship,Entity Framework 4.1,Entity Relationship,两种情况: 我有XML格式的节点和NodeDetails。我循环浏览文档,创建新的节点实体,然后向其中添加节点详细信息,然后通过调用db.SaveChanges()将它们保存在一起。当我跟踪调用时,我看到的只是一堆insert语句:首先是Node,然后是NodeDetails 在第二个场景中,我有Posts和PostDetails。日志已存储在数据库中。因此,我检索一篇文章,分析它,向其中添加PostDetails,然后保存。当我跟踪调用时,我会看到此帖子的select from POSTDET

两种情况:

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

在第二个场景中,我有Posts和PostDetails。日志已存储在数据库中。因此,我检索一篇文章,分析它,向其中添加PostDetails,然后保存。当我跟踪调用时,我会看到此帖子的select from POSTDETILES表,然后我会看到inserts。当我看到一条语句,上面写着
post.PostDetails.Add(newPostDetail)时,就会出现select部分


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

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

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

post.PostDetails = new List<PostDetail>();
post.PostDetails.Add(newPostDetail);
var postDetail = new PostDetail{ Post = post };
//populate other properties
db.PostDetails.Add(postDetail);