带有 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()
派上用场强制分配结果
我收到 "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()
派上用场强制分配结果