带有 IEnumerable<T> 模型的 MVC 视图来自 Linq To Entities - 对象处置错误

MVC View with IEnumerable<T> model comes from Linq To Entities - object disposed error

我收到 "Object Disposed" 异常,因为我将 Linq 查询的结果作为 IEnumerable 传递到视图中,但 linq 在围绕数据库上下文的 using 块内运行。解决此问题的最佳方法是什么,最好避免额外的样板化?

我在控制器中有这个,注意处理我认为的 linq 查询的 using 块:

HomeViewModel 模型 = new HomeViewModel();

 using (var ctx = new MyContext())
 {
    model.StuffList = (from p in ctx.Stuffs orderby p.ModifiedDate descending select p).Take(10);
 }

在我得到的视图中:

@model IEnumerable<Stuff>

它开始渲染视图时出现 "Object Disposed" 异常。 WCS 我可以为视图模型创建一个单独的列表并复制结果,但我想尽可能避免额外的锅炉电镀。

谢谢!

LINQ 和其他数据访问相关框架将 return 您将 IEnumerable 作为合同。优点是此时不需要获取数据。 LINQ 仍然可以控制它想要查询数据的方式和时间。例如:如果您仅将 .Count() 应用于可枚举对象,linq 可能仅使用 sql 计数语句查询数据库。

这种行为让您有责任在关闭任何数据库上下文、网络请求或您的 IEnumerable<> 来自的任何地方之前显式获取数据。

.ToList()派上用场强制分配结果