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