0

这是我的 POCO 实体场景:

Manufacturer(1) 有Cars(*)

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

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

我需要Cars使用它们各自的 查询所有指定的颜色,Manufacturer所以我的 EF 查询将是:

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

这就是我得到的: 的列表CarsManufacturer正确填充

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

Cars.FirstOrDefault().Manutefacturer.Cars车满了……

我怎样才能摆脱这种不良行为?

非常感谢。

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

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

2 回答 2

1

问题是制造商实体也为其带来了导航属性 Cars 填充: Cars.FirstOrDefault().Manufacturer.Cars充满了汽车......

是的,但仅限于白色汽车......

这不是数据库查询中要求Cars收集每个加载的制造商的附加连接。但是,只有您在查询中加载的汽车(白色汽车)被添加到其各自制造商的集合中。当加载的数据具体化为实体时,实体框架上下文会执行此操作。这称为关系修复,您不能禁用它。最近有一个类似的问题和答案。

于 2013-05-23T18:13:21.957 回答
0

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

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

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

然后只会出现您手动加载的导航属性Include()

也就是说,如果您正在访问该Cars属性,您希望它被填充,不是吗?而且,如果您不访问它,那么延迟加载将不会首先发生。

于 2013-05-23T14:14:01.747 回答