我正在使用Entity Framework 4.1并且我有一对多的关系。
当我在关系的一侧查询延迟加载的ICollection<T>
时,返回整个记录集,并且不会像执行直接从存储库IQueryable
接口查询时那样推迟执行
有没有办法让这个使用延迟执行,所以我可以做一个像
这样的查询Model.Childs.Where(x => !x.Deleted.HasValue).Skip(10).Take(5);
提前致谢,
汤姆。
答案 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();