【问题标题】:ASP.NET MVC, EF: Make action methods return List instead of IEnumerableASP.NET MVC、EF:使操作方法返回 List 而不是 IEnumerable
【发布时间】:2012-04-25 16:01:49
【问题描述】:

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

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

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

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

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

感谢您的帮助。

【问题讨论】:

  • 在将数据交给视图之前,您确实应该确保查询已具体化(执行)。调用 ToList() 是一种方法。

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


【解决方案1】:

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

如果您仍然打算加载整个枚举,那么调用 .ToList 将通过一次抓取而不是一次请求所有内容来节省带宽。所以,如果这听起来像是一条更好的道路。

【讨论】:

  • 假设 List 将在分页后返回,因此每个部分是
猜你喜欢
  • 2022-07-11
  • 1970-01-01
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 2012-05-15
相关资源
最近更新 更多