为什么要预先加载实体?
Why are the entities being eager-loaded?
我有一个包含多个层的实体层次结构,其中一层包含数以万计的对象。有时我只想要顶级对象,但我发现 Entity Framework 正在加载层次结构中的 everything。
我什至尝试过显式延迟加载,但无济于事。
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
)包含数千个对象。
为什么?
使用调试器获取它们将加载它们。调试器没有做任何与常规代码不同的事情。它正在调用 属性 的 getter,并执行此操作来获取数据。
记录实际执行的数据库查询(通过上下文或通过数据库),以查看以实际上不会改变的方式提取的数据正在执行哪些查询。
我有一个包含多个层的实体层次结构,其中一层包含数以万计的对象。有时我只想要顶级对象,但我发现 Entity Framework 正在加载层次结构中的 everything。
我什至尝试过显式延迟加载,但无济于事。
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
)包含数千个对象。
为什么?
使用调试器获取它们将加载它们。调试器没有做任何与常规代码不同的事情。它正在调用 属性 的 getter,并执行此操作来获取数据。
记录实际执行的数据库查询(通过上下文或通过数据库),以查看以实际上不会改变的方式提取的数据正在执行哪些查询。