因此,有人建议我在使用上述框架构建应用程序时禁用延迟加载,并且ToList()将强制执行存储库中的查询。有人告诉我,如果使用AsEnumerable(),我会避免遇到某些“陷阱”。
但是,在最近的一个问题上,我在代码示例中加入了一堆ToList(),使许多人确信IEnumerable可以更好地返回。
至少可以说,我现在很困惑。
我应该在存储库中返回IEnumerable,然后在视图模型中将它们转换为List吗?我是否应该像以前一样直接在存储库中使用ToList()?我是否应该首先启用延迟执行?
吉米妮圣诞节...
编辑:
因此,基于先前的建议,我禁用了延迟加载,然后应该重新启用它,从存储库中返回IEnumerable / IQueryable,然后根据需要将集合转换为视图模型中的List吗?
下面的答案之一将IEnumerable与急切的执行相关联,而我的印象是,只有ToList()会强制立即执行查询。
我偶然发现了this,this和this,它们都包含与此问题相关的一些有趣的讨论。
最佳答案
调用ToList()
,如果满足以下条件,则在存储库中返回IEnumerable
:
您想要控制提供给使用者的输出集(即您不希望他们在其上运行查询),并且
您不介意渴望执行。
在满足以下条件的情况下,在存储库中返回IQueryable
或通过IEnumerable
返回AsEnumerable()
:
您不在乎您的使用者在输出集上运行查询,并且
您要推迟执行。
也可以看看
http://thinkbeforecoding.com/post/2009/01/19/Repositories-and-IQueryable-the-paging-case