防止 DbContext 在异步任务完成之前被释放

Prevent DbContext from being disposed until async task completes

我有一个 C# 核心 Web API 控制器(Microsoft.AspNetCore.Mvc.ControllerBase 的实现),它有 API 方法 A 和 API 方法 B。A 是异步的,触发和忘记异步工作线程。 B是同步的。

A​​(及其工作线程)和 B 使用 entity framework 从同一数据库读取和写入。但我遇到的问题是 DBContext 对象在 A 的工作线程完成之前就被释放了。

我知道一次性对象的所有者应该同时创建和处置它的原则。所以我考虑将 A 的 DBContext 包装在一个不是一次性的存储库 class 中,但这似乎违反了分析器规则:“CA1001:拥有一次性字段的类型应该是一次性的” - https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1001 但是如果我让Repository 对象是一次性的,Dotnet Core 在 A returns 时(但在其工作线程完成之前)处理它。

我也考虑过将 Repository 设为单例,但这违反了 DbContext 对象应该是短暂存在的原则。

感谢您提出的任何建议!

A is asynchronous and fires and forgets an async worker thread.

然后工作线程不得使用依赖注入管理的Scoped DbContext。相反,它应该在 using 块中创建 DbContext 实例并在代码中显式管理其生命周期。