2012-04-18 96 views
0

我正在使用实体框架4.1,我有一对多的关系。实体框架和延迟加载的ICollection执行

当我查询懒返回整个记录的关系的一个侧面加载ICollection<T>,它不会推迟执行,当我查询直接从系统信息库IQueryable接口等。

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

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

感谢,

汤姆。

回答

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();