使 ef 核心 DbContext 瞬态化是个坏主意吗?
Is it a bad idea to make ef core DbContext transient?
我有多个 IHostedService 实例,每个实例根据其启动的时间应该使用 DbContext 来执行一些数据库工作。
在这种情况下,我应该使用作用域、瞬态还是单例?
提前致谢。
归结为设计和架构,但我建议始终走“Scoped”路线。
这将确保每个新请求都会收到一个新的上下文,但相同的上下文将用于相同的请求,这意味着您开始获得“事务性”类型的请求服务,这是最好的99% 的业务案例要做的事情。
如果有一个请求即:
- 为用户分配新车辆
- 对用户的帐户收费
那么您希望服务器请求中的整个业务逻辑对于数据的更改是“事务性的”。两种更改要么成功并作为“业务事务”的一部分提交,要么不成功,从而为您留下一个干净的数据集。
让它们“瞬态”存在很多与并发相关的风险,尤其是因为我们正在谈论 EF 上下文。
考虑到应用程序的一般架构和正确处理依赖项注入,让它们成为“单例”可能没问题。
我有多个 IHostedService 实例,每个实例根据其启动的时间应该使用 DbContext 来执行一些数据库工作。
在这种情况下,我应该使用作用域、瞬态还是单例?
提前致谢。
归结为设计和架构,但我建议始终走“Scoped”路线。
这将确保每个新请求都会收到一个新的上下文,但相同的上下文将用于相同的请求,这意味着您开始获得“事务性”类型的请求服务,这是最好的99% 的业务案例要做的事情。
如果有一个请求即:
- 为用户分配新车辆
- 对用户的帐户收费
那么您希望服务器请求中的整个业务逻辑对于数据的更改是“事务性的”。两种更改要么成功并作为“业务事务”的一部分提交,要么不成功,从而为您留下一个干净的数据集。
让它们“瞬态”存在很多与并发相关的风险,尤其是因为我们正在谈论 EF 上下文。
考虑到应用程序的一般架构和正确处理依赖项注入,让它们成为“单例”可能没问题。