0

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

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

有什么办法可以让这个使用延迟执行,所以我可以做一个像这样的查询

Model.Childs.Where(x => !x.Deleted.HasValue).Skip(10).Take(5);

提前致谢,

汤姆。

4

1 回答 1

1

这就是 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();
于 2012-04-18T09:42:49.953 回答