【发布时间】:2020-04-21 05:00:35
【问题描述】:
你们中的一些人可能熟悉DbContextScope library,它允许您在代码中嵌套范围,并允许这些范围共享一个公共 DbContext。这个想法是 DbContext 由作用域库为您管理,而不是在上下文上调用 SaveChanges(),而是在作用域上调用 SaveChanges()。之所以神奇,是因为作用域只会在最外层调用 SaveChanges() 时保存上下文中的所有更改,因此在 DbContext 上执行的所有嵌套操作都会保存在外部作用域级别的单个事务中。
既然 DI 是 .NET Core 中的一等公民,看来作用域也成为了 .NET Core 生态系统的重要组成部分,而 EF Core 团队知道这一点,已经在允许 DbContexts 的基础上实现了作用域由 DI 系统注入,并且(我假设)允许在范围级别进行更改保存,而不是以某种方式直接在 DbContexts 上进行。
所以我的问题是:
- 通过范围共享 DbContext 的适当方法是什么,允许在范围级别而不是通常在 DbContext 上调用 SaveChanges() 的代码级别管理 SaveChanges()?
- EF Core 中是否有新机制可以为您管理这个问题,就像 DbContextScope 作为第 3 方库为您做的那样?
- 别闹了,别再讲你为什么认为除了 EF 还需要实施 UOW 的讲座。 K thnxs 再见。
更新:截至 2020 年 6 月,有多个 DbContextScope 分支可与 EF Core 3 配合使用。
更新:这个项目的分叉可以在这里查看:https://github.com/mehdime/DbContextScope/network
有几个 EF Core 3 版本...我还没有尝试过,但是你去吧。
【问题讨论】:
-
我认为您可以放心地坚持使用 DbContextScope。 AmbientContext(它遵循的设计模式)在这里是一个合适的解决方案,就像它对于 TransactionScope 一样。
-
@Rafe - 回复:“有几个 DbContextScope 分支可与 EF Core 3 一起使用”:您能否分享指向哪些分支表示支持的链接?谢谢。
-
@DerekBromenshenkel 请参阅上面的第二次更新。
-
@Rafe 您正在使用哪些分支与 EF Core 3 配合使用?
-
@guaike 老实说,我还没有升级。我很想知道是否有人使用过其中一个 EF Core 3 分支。
标签: entity-framework .net-core entity-framework-core ef-core-3.0