实体框架POCO渴望加载儿童

时间:2013-05-23 13:23:09

标签: entity-framework entity poco eager-loading

这是我的POCO实体场景:

Manufacturer(1)有Cars(*)

一个Car实体具有Manufacturer实体的导航属性。

一个Manufacturer实体具有Cars集合的导航属性

我需要查询指定颜色的所有Cars及其各自的Manufacturer,因此我的EF查询将是:

Context.Cars.Where(i=>i.Color=='White').Include("Manufacturer").ToList();

这就是我得到的: Cars列表,其中Manufacturer已正确填充

问题是Manufacturer实体也会为其填充导航属性Cars

Cars.FirstOrDefault().Manutefacturer.Cars装满了汽车......

我如何摆脱这种不良行为?

非常感谢。

更新#1: 我确实设置了以下属性:

this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;

2 个答案:

答案 0 :(得分:1)

  

问题是制造商实体带来了导航   物业汽车也填充:   Cars.FirstOrDefault().Manufacturer.Cars装满了汽车....

是的,但只有白色车......

数据库查询中没有额外的连接要求每个已加载的制造商的Cars集合。但只是您在查询中加载的汽车 - 白色汽车 - 被添加到各自制造商的集合中。当加载的数据实现为实体时,实体框架上下文执行此操作。它被称为 relationship fixup ,您无法禁用它。 Here最近也是一个类似的问题和答案。

答案 1 :(得分:0)

听起来您可能启用了延迟加载,这会在第一次访问时自动从数据库加载导航属性。

您可以在构造函数中为整个DbSet禁用它:

public MyContext() : base()
{
  this.Configuration.LazyLoadingEnabled = false;
}

然后,只会出现使用Include()手动加载的导航属性。

也就是说,如果你正在访问Cars属性,那么想要填充它,不是吗?如果您没有访问它,那么首先不会发生延迟加载。