因此,有人建议我在使用上述框架构建应用程序时禁用延迟加载,并且ToList()将强制执行存储库中的查询。有人告诉我,如果使用AsEnumerable(),我会避免遇到某些“陷阱”。

但是,在最近的一个问题上,我在代码示例中加入了一堆ToList(),使许多人确信IEnumerable可以更好地返回。

至少可以说,我现在很困惑。

我应该在存储库中返回IEnumerable,然后在视图模型中将它们转换为List吗?我是否应该像以前一样直接在存储库中使用ToList()?我是否应该首先启用延迟执行?

吉米妮圣诞节...

编辑:
因此,基于先前的建议,我禁用了延迟加载,然后应该重新启用它,从存储库中返回IEnumerable / IQueryable,然后根据需要将集合转换为视图模型中的List吗?

下面的答案之一将IEnumerable与急切的执行相关联,而我的印象是,只有ToList()会强制立即执行查询。

我偶然发现了thisthisthis,它们都包含与此问题相关的一些有趣的讨论。

最佳答案

调用ToList(),如果满足以下条件,则在存储库中返回IEnumerable


您想要控制提供给使用者的输出集(即您不希望他们在其上运行查询),并且
您不介意渴望执行。


在满足以下条件的情况下,在存储库中返回IQueryable或通过IEnumerable返回AsEnumerable()


您不在乎您的使用者在输出集上运行查询,并且
您要推迟执行。


也可以看看
http://thinkbeforecoding.com/post/2009/01/19/Repositories-and-IQueryable-the-paging-case

10-07 13:58