ASP.NET MVC,EF:使动作方法返回List而不是IEnumerable

时间:2012-04-25 16:01:49

标签: asp.net-mvc performance entity-framework

我的控制器中有几个操作可以返回EF实体的IEnumerable。

我正在考虑让这些actionmethods返回一个列表(只是在将它传递回视图之前调用model.ToList())。

我正在考虑这样做有两个原因:

  • 首先,我正在测量BaseController类中每个action方法的性能(onactionexecuted / onactionexecuting),如果我返回一个IEnumerable,那么直到onactionexecuted方法之后才会执行查询。
  • 其次,我计划在OnActionExecuted中部署我的“服务层”使用的连接,但是如果我将它们放在那里,那么视图将无法检索模型的bc。

我的问题是,这样做有什么缺点吗? 我很确定每个IEnumerable模型都会被完全遍历,所以检索不会被使用的数据也不会有问题。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

这是IMO完全有效的事情。你几乎已经指出了利弊。主要区别在于.ToList一次性加载到内存中,而另一个允许按需加载。

如果您计划无论如何都要加载整个枚举,那么调用.ToList会通过一次抓取所有内容而不是一次请求来节省带宽。所以,无论如何,这听起来似乎是一条更好的道路。