Entity framework 实体框架模型中如何避免获取所有关系

Entity framework 实体框架模型中如何避免获取所有关系,entity-framework,relationship,Entity Framework,Relationship,我正在开发一个迁移应用程序,由于源模型有很大的关系,我在OutOfMemory方面遇到了问题 最好用一个例子来解释: EntityA有6个关系(EntityB、EntityC、EntityD…) EntityB有8个关系 EntityB1有3个关系 就这样继续下去 问题是,当你试图获取所有信息并完成所有过程时,应用程序会抛出和抛出内存异常 我想知道我是否可以避免一些关系,或者在不可能避免所有关系的情况下。(按程序) 提前感谢您正在搜索以禁用延迟加载 延迟加载意味着,当您第一次访问查询中的属性

我正在开发一个迁移应用程序,由于源模型有很大的关系,我在OutOfMemory方面遇到了问题

最好用一个例子来解释:

  • EntityA有6个关系(EntityB、EntityC、EntityD…)
  • EntityB有8个关系
  • EntityB1有3个关系
就这样继续下去

问题是,当你试图获取所有信息并完成所有过程时,应用程序会抛出和抛出内存异常

我想知道我是否可以避免一些关系,或者在不可能避免所有关系的情况下。(按程序)


提前感谢

您正在搜索以禁用延迟加载

延迟加载意味着,当您第一次访问查询中的属性时,将自动透明地加载实体

使用EDMX,您可以禁用它编辑其属性(F4 on.EDMX文件)。

使用代码优先,您可以使用以下行:

dbContext.Configuration.LazyLoadingEnabled = false;
现在您已经禁用了它,您必须在查询中包含您需要使用的关系:

dbContext.MyEntity.Include(p=> p.MyRelationProperty)
                  .Include(p=> p.MyOtherRelationProperty)
                  [...]
                  .ToList();


关闭延迟加载,只“包含”您真正需要的内容。延迟加载只有在实际触发时才会出现问题。如果是在数据迁移过程中触发的,则意味着数据是必需的,而急切加载不是解决方案。请显示迁移过程的更多详细信息。不清楚为什么您认为“避免一些关系”会有帮助,或者这是否可能(参见我之前的评论)。为什么您认为延迟加载是问题所在?请看我在问题下的评论。我认为这可能是解决办法,但我必须尝试一下。还有一个问题,可以在实体列表中包含。(“x”)或to.load()。我想在第一次搜索后加入或加载,以提高性能。@GertArnold同意您的看法。也许是另一个原因。我测试一个解决90%案例的解决方案。如果不能解决,我将删除答案@Kartg不确定我是否理解您的问题,但可以包含一个集合,如
.include(“MyCollectionProperty”)
对不起,我解释得不好,但我使用dbContext.MyEntity.include(“MyRelationProperty”).include(“MyRelationProperty.MySubRelationProperty”)。其中(x=>x.something=“yes”).Include(“MyOtherRelationProperty”).ToList()好的,@kartGIS如果我的anwser对您有帮助,请随时接受检查绿色勾号谢谢!
dbContext.MyEntity.Include("MyRelationProperty")
                  .Include("MyRelationProperty.MySubRelationProperty")
                  .Include("MyOtherRelationProperty")
                  [...]
                  .ToList();