【问题标题】:Await is disposing DbContext - The ObjectContext instance has been disposedAwait 正在处理 DbContext - ObjectContext 实例已被处理
【发布时间】:2017-03-19 13:38:56
【问题描述】:

我在 async 方法中有以下内容,其中传递了一个 dbContext 的实例:

 var userIds = await GetUserIds(db);

使用 GetUserIds:

    private async Task<List<int>> GetUserIds(AppContext db)
    {
        var items = await db.Items.Where(s => s.IsValid).Distinct().ToListAsync(); // simplified
        return items;
    }

但我明白了:

{"ObjectContext 实例已被释放,不能再被释放 用于需要连接的操作。"}

我可以通过删除awaitToListAsync 来强制它运行,但显然这只是一个创可贴。为什么我的上下文被释放了?

【问题讨论】:

  • await 不会处理 DbContext。问题出在您尚未发布的代码中。一些 IoC 容器过于急于处置;这可能会导致您所看到的。
  • @StephenCleary 感谢您的持续帮助。我会贴出周围的代码。

标签: c# .net entity-framework asynchronous async-await


【解决方案1】:

我怀疑您的 GetUserIds 方法的调用者正在操作完成之前处理上下文。您确定在释放上下文之前等待返回的任务吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多