具有实体框架4的ASP.NET MVC2-存储库中的AsEnumerable()或ToList()?
因此,有几次建议我在使用上述框架构建应用程序时禁用延迟加载,并且ToList()将强制执行存储库中的查询。有人告诉我,如果我使用AsEnumerable(),我将避免可能遇到的某些“陷阱” 然而,在最近的一个问题上,我在代码示例中包含了一堆ToList(),这让许多人大吃一惊,他们向我保证IEnumerable更适合返回 至少可以说,我现在完全糊涂了 我是否应该在我的存储库中返回IEnumerable,然后将它们转换为视图模型中的列表?我应该像以前一样在存储库中直接使用ToList()吗?我是否应该首先启用延迟执行 吉米尼圣诞节 编辑: 因此,既然我根据前面的建议禁用了延迟加载,那么我是否应该重新启用它,从存储库返回IEnumerable/IQueryable,并在需要时将集合转换为视图模型中的列表 下面的一个答案将IEnumerable与急切执行联系起来,而我的印象是只有ToList()会强制立即执行查询 我偶然发现,所有这些都包含一些与此问题相关的有趣讨论。调用具有实体框架4的ASP.NET MVC2-存储库中的AsEnumerable()或ToList()?,asp.net,asp.net-mvc,linq,entity-framework,Asp.net,Asp.net Mvc,Linq,Entity Framework,因此,有几次建议我在使用上述框架构建应用程序时禁用延迟加载,并且ToList()将强制执行存储库中的查询。有人告诉我,如果我使用AsEnumerable(),我将避免可能遇到的某些“陷阱” 然而,在最近的一个问题上,我在代码示例中包含了一堆ToList(),这让许多人大吃一惊,他们向我保证IEnumerable更适合返回 至少可以说,我现在完全糊涂了 我是否应该在我的存储库中返回IEnumerable,然后将它们转换为视图模型中的列表?我应该像以前一样在存储库中直接使用ToList()吗?我是否
ToList()
,在存储库中返回一个IEnumerable
,如果:
AsEnumerable()
返回IQueryable
,或IEnumerable
:
我想我的部分问题包括是否应该像一些人建议的那样,使用给定的框架组合强制执行急切执行。除了我已经提到的因素外,强制执行急切执行实际上可能会导致性能问题;整个数据集一次返回,即使使用者可能实际上并不需要所有数据。除了排序和分页之外,
IQueryable
允许您投影到演示模型上,而无需担心加载策略。我认为如果某个东西实现了IQueryable
,并且您将其作为IEnumerable
返回,那么底层对象仍然是IQueryable
,因此保留了延迟执行等等。。。?因此需要返回IList
。我知道IEnumerable
不是IQueryable
,我只是指出仅仅返回IEnumerable
是不够的。您的编辑确实清除了它,尽管我要补充的是,AsEnumerable()
不是必需的,请参见IQuerable
已经从IEnumerable
继承的内容。