【发布时间】:2022-11-02 23:22:52
【问题描述】:
我在我的 BackgroundService 中使用数据库上下文,它在异步/等待操作期间被释放:
无法访问已释放的上下文实例。造成这种情况的一个常见原因 错误正在处理已解决的上下文实例 依赖注入,然后尝试使用相同的上下文 在您的应用程序的其他地方实例。如果您是 在上下文实例上调用“Dispose”,或将其包装在 using 陈述。如果你使用依赖注入,你应该让 依赖注入容器负责处理上下文 实例。\n对象名称:“MyDbContext”。
我正在使用 DI:
services.AddDbContext<MyDbContext>( options => options.UseNpgsql(connectionString), contextLifetime: ServiceLifetime.Transient, optionsLifetime: ServiceLifetime.Singleton);任何像
SaveChangesAsync这样的 async/await 操作都可能导致 db-context 被释放。 我究竟做错了什么?
【问题讨论】:
-
可能有几个可能的原因。
async void可能会导致这种情况,即触发后不管任务,或尝试使用内存中的后台任务处理器。请发布一个完整的示例来重现该问题。
标签: entity-framework async-await