C# ';无法完成该操作,因为DbContext已被释放';-添加Dispose()后

C# ';无法完成该操作,因为DbContext已被释放';-添加Dispose()后,c#,asp.net,asp.net-mvc,entity-framework,web-applications,C#,Asp.net,Asp.net Mvc,Entity Framework,Web Applications,在添加行之后,我在各种控制器操作上得到上述错误 protected override void Dispose(bool disposing) { repo.Dispose(); base.Dispose(disposing); } …给我的控制器。在添加这一行之前,我遇到了一个问题,DbContext在记录更新操作后返回旧的或缓存的数据。现在这似乎已经解决了,但我遇到了“DbContext已被处理”的问题。我的控

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

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);
        }
    }
存储库看起来像这样

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()函数添加到控制器后错误的变化使我认为这是我实现IDisTable的方式的问题


通过使用调试器,我看到在控制器构造函数中创建上下文和实际输入存储库方法之间,上下文正在被释放。就像当执行离开控制器上下文的作用域时一样。Dispose()方法就是这样工作的吗?如果是这样,我是否需要从构造函数中删除Dispose()实现?

您是否尝试过在
this.Dispose
之前以相反的顺序调用它(意思是
base.Dispose
)?是否从方法中返回实体对象,在处理用于获取它们的数据上下文之后?老实说,我真的不知道什么时候调用dispose,什么时候处理上下文。有问题的存储库调用大多返回IEnumerableLike,例如,我不明白为什么在控制器和存储库中需要Dispose()实现uses@evanmcdonnal-不,那没有解决问题