添加行后,我在各种控制器操作上遇到上述错误....
protected override void Dispose(bool disposing)
{
repo.Dispose();
base.Dispose(disposing);
}
...给我的控制器。在添加此行之前,我遇到了DbContext在记录更新操作后返回旧数据或缓存数据的问题。现在这似乎是固定的,但我已经处理了DbContext'问题。我的控制器看起来像这样......
public class CasesToReviewController : Controller
{
private CaseReviewRepository repo;
public CasesToReviewController()
{
repo = new CaseReviewRepository(DataAccess.Current);
}
protected override void Dispose(bool disposing)
{
repo.Dispose();
base.Dispose(disposing);
}
}
存储库看起来像这样......
public class CaseReviewRepository : IDisposable
{
private HSADBContext _db;
public CaseReviewRepository(HSADBContext db)
{
_db = db;
}
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
_db.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
DataAccess.Current是一个Ninject绑定。我不确定我可以发布多少内容,因为它不是我的代码,但它似乎在我正在处理的项目的其他控制器中正常工作,以及之后的错误更改将Dispose()函数添加到控制器让我觉得这是我实现IDispoable的方式的问题。
单步执行调试器我看到上下文在之间处理它在Controller构造函数中创建它的时间以及实际输入存储库方法的时间。就像执行时留下控制器上下文的范围一样。这是Dispose()方法的工作原理吗?如果是这样,我需要从构造函数中删除Dispose()实现吗?