【问题标题】:The operation cannot be completed because the DbContext has been disposed, PagedList操作无法完成,因为 DbContext 已被释放,PagedList
【发布时间】:2015-04-03 09:28:58
【问题描述】:

使用 ASP.NET MVC 和 Entity,我不断收到“操作无法完成,因为 DbContext 已被释放。”。

将 UnitOfWork 模式与 GenericRepository 一起使用。

异常发生在 PagedList.PagedListExtensions.ToPagedList 中。

我尝试使用 AsNoTracking,但没有任何结果。

如何避免发生这些异常,因为它会导致客户端界面因内部错误而崩溃。

【问题讨论】:

  • 你可能被延迟执行的查询所困扰,但是没有代码很难确认

标签: sql-server entity-framework asp.net-mvc-4


【解决方案1】:

您很可能在处理上下文之前不会要求枚举查询。在您要求枚举查询之前,LINQ to Entities 实际上不会执行查询,即查看结果集中的每个项目。 ToPagedList 听起来就是那种需要枚举的东西。

解决方法是在处理上下文(可能在存储库中)之前强制枚举查询,方法是在其上调用.ToList()

【讨论】:

  • 不会查询每个返回的元素。例如,如果查询返回 50000 个结果,我会在内存中有 50k 个结果?
  • 如果您的结果集那么大,则在非通用存储库或类似存储库中调用 ToPagedList 并返回单个页面。 “我想要第 n 页数据”是应该由您的数据抽象层提出的请求。我不喜欢 Generic Repository 的(许多)原​​因之一是它不鼓励使用标准 CRUD 方法以外的数据访问方式。
猜你喜欢
  • 1970-01-01
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 2021-03-01
  • 2015-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多