使 ef 核心 DbContext 瞬态化是个坏主意吗?

Is it a bad idea to make ef core DbContext transient?

我有多个 IHostedService 实例,每个实例根据其启动的时间应该使用 DbContext 来执行一些数据库工作。

在这种情况下,我应该使用作用域、瞬态还是单例?

提前致谢。

归结为设计和架构,但我建议始终走“Scoped”路线。

这将确保每个新请求都会收到一个新的上下文,但相同的上下文将用于相同的请求,这意味着您开始获得“事务性”类型的请求服务,这是最好的99% 的业务案例要做的事情。

如果有一个请求即:

  1. 为用户分配新车辆
  2. 对用户的帐户收费

那么您希望服务器请求中的整个业务逻辑对于数据的更改是“事务性的”。两种更改要么成功并作为“业务事务”的一部分提交,要么不成功,从而为您留下一个干净的数据集。

让它们“瞬态”存在很多与并发相关的风险,尤其是因为我们正在谈论 EF 上下文。

考虑到应用程序的一般架构和正确处理依赖项注入,让它们成为“单例”可能没问题。