实体框架和延迟执行延迟加载的ICollection

时间:2012-04-18 08:40:12

标签: entity-framework-4 deferred-execution

我正在使用Entity Framework 4.1并且我有一对多的关系。

当我在关系的一侧查询延迟加载的ICollection<T>时,返回整个记录集,并且不会像执行直接从存储库IQueryable接口查询时那样推迟执行

有没有办法让这个使用延迟执行,所以我可以做一个像

这样的查询
Model.Childs.Where(x => !x.Deleted.HasValue).Skip(10).Take(5);

提前致谢,

汤姆。

1 个答案:

答案 0 :(得分:0)

这是EF中延迟加载的原则。您的导航属性在您的代码中定义,并且在该属性上定义的任何LINQ查询都是LINQ-to-Objects - 它不会转换为SQL。延迟加载总是加载整个集合(以及急切加载)。当您查询存储库时,您正在查询IQueryable并使用转换为SQL的LINQ-to-Entities。

作为解决方法使用显式加载:

dbContext.Entry(Model).Collection(m => m.Childs)
                      .Query()
                      .Where(c => !c.Deleted.HasValue)
                      .Skip(10)
                      .Take(5)
                      .Load();