【问题标题】: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 在插入之前不要检索列表?

【问题讨论】:

    标签: entity-framework-4.1 entity-relationship


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多