'操作无法完成,因为已经处理了DbContext' - 添加Dispose()之后

时间:2014-04-14 18:08:00

标签: c# asp.net asp.net-mvc entity-framework web-applications

添加行后,我在各种控制器操作上遇到上述错误....

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()实现吗?

0 个答案:

没有答案