我有一个包含多个图层的实体层次结构,其中一个图层包含的对象数量可以达到数十万个。有时我只想要顶级对象,但我发现实体框架正在加载层次结构中的所有。
我甚至尝试过明确的延迟加载,但无济于事。
using (var db = new MyEntities())
{
db.Configuration.ProxyCreationEnabled = true;
db.Configuration.LazyLoadingEnabled = true;
var daoDict = (from d in db.stt_dictionary
where d.id == dictionaryID && !d.deleted
select d).FirstOrDefault();
}
在调试时,如果我单步执行此操作然后将鼠标悬停在daoDict
上,我会发现其集合属性(virtual
)包含数千个对象。
为什么?
答案 0 :(得分:8)
使用调试器获取它们将加载它们。调试器没有做任何与常规代码不同的事情。它调用属性的getter,然后执行该操作获取数据。
记录实际执行的数据库查询(通过上下文或通过数据库),以查看实际更改查询的方式时正在提取的数据被执行。