EF Core 3 的 DbContextScope 模式

Raf*_*afe 8 entity-framework entity-framework-core .net-core ef-core-3.0

有些人可能熟悉DbContextScope 库,它允许您在代码中嵌套作用域,并允许这些作用域共享公共 DbContext。这个想法是 DbContext 由作用域库为您管理,而不是在上下文上调用 SaveChanges(),而是在作用域上调用 SaveChanges()。神奇的发生是因为作用域只会在最外层调用 SaveChanges() 时保存对上下文的所有更改,因此在 DbContext 上执行的所有嵌套操作都保存在外部作用域级别的单个事务中。

现在 DI 是 .NET Core 中的一等公民,看来作用域也成为了 .NET Core 生态系统的重要组成部分,EF Core 团队知道这一点,已经实现了基于允许 DbContexts 被注入的作用域DI 系统,并且(我假设)允许更改保存发生在范围级别,而不是以某种方式直接发生在 DbContext 上。

所以我的问题是:

  • 通过范围共享 DbContext 的适当方法是什么,允许在范围级别而不是通常在 DbContext 上调用 SaveChanges() 的代码级别管理 SaveChanges()?
  • EF Core 中是否有新机制为您管理这些,就像 DbContextScope 作为第 3 方库为您做的那样?
  • 省去我的戏份,让我少讲讲为什么你认为除了 EF 之外还需要实施 UOW。再见。

更新:截至 2020 年 6 月,有多个 DbContextScope 分支可与 EF Core 3 配合使用。

更新:可以在此处查看此项目的分叉:https : //github.com/mehdime/DbContextScope/network

有几个 EF Core 3 版本......我还没有尝试过,但是你去吧。

Dav*_*oft -2

DbContext 共享内置于 EF 的依赖注入设计中。

DI 容器将为每个 Web 请求生成一个作用域 DbContext 实例。您可以从依赖于它的任何组件共享 DbContext 实例,并调用 SaveChanges(),或管理外部控制器中的事务。