因此,在构建具有上述框架的应用程序时,我已经被建议几次禁用延迟加载,并且ToList()将强制执行我的存储库中的查询。有人告诉我,如果我使用AsEnumerable(),我会避免遇到某些“陷阱”。
然而,在最近的一个问题中,我在我的代码示例中包含了一堆ToList(),并且让很多人放心,确保IEnumerable更好回归。
至少可以说,我现在很困惑。
我应该在我的存储库中返回IEnumerable,然后在我的视图模型中将它们转换为List吗?我应该像以前一样在我的存储库中直接使用ToList()吗?我是否想首先启用延迟执行?
Jiminy圣诞节......
修改 因此,基于之前的建议,我禁用了延迟加载,我是否应该重新启用它,从我的存储库返回IEnumerable / IQueryable,并在需要时将集合转换为视图模型中的List?
以下答案之一将IEnumerable与急切执行相关联,而我的印象是只有ToList()会强制立即执行查询。
答案 0 :(得分:16)
调用ToList()
,在您的存储库中返回IEnumerable
,如果:
如果符合以下条件,请在您的存储库中通过IQueryable
返回IEnumerable
或AsEnumerable()
另见
http://thinkbeforecoding.com/post/2009/01/19/Repositories-and-IQueryable-the-paging-case