gpt4 book ai didi

entity-framework - EF Core 3 的 DbContextScope 模式

转载 作者:行者123 更新时间:2023-12-03 17:38:18 27 4
gpt4 key购买 nike

你们中有些人可能熟悉DbContextScope library ,它允许您在代码中嵌套范围,并允许这些范围共享一个公共(public) DbContext。这个想法是 DbContext 由作用域库为您管理,而不是在上下文上调用 SaveChanges(),而是在作用域上调用 SaveChanges()。神奇的发生是因为作用域只会在最外层调用 SaveChanges() 时保存上下文中的所有更改,因此在 DbContext 上执行的所有嵌套操作都保存在外部作用域级别的单个事务中。
既然 DI 是 .NET Core 中的一等公民,看来作用域也已成为 .NET Core 生态系统的重要组成部分,而 EF Core 团队知道这一点,已经在允许 DbContexts 被注入(inject)的基础上实现了作用域DI 系统,并且(我假设)允许在范围级别进行更改保存,而不是以某种方式直接在 DbContexts 上进行。
所以我的问题是:

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

  • 更新:截至 2020 年 6 月,有几个 DbContextScope 分支可与 EF Core 3 一起使用。
    更新:这个项目的 fork 可以在这里查看: https://github.com/mehdime/DbContextScope/network
    有几个 EF Core 3 版本...我还没有尝试过,但是你去吧。

    最佳答案

    从 Entity Framework 5.0.0 开始,there is IDbContextFactory<TDbContext>这使您可以控制 DbContexts 的创建和处置 (!!)。
    而不是使用 AddDbContext 注册您的 DbContext或 AddDbContextPool ,您现在可以使用 AddDbContextFactoryAddPooledDbContextFactory , 分别。
    请注意,此功能解决了 DbContextScope 中的一个问题。解决了,不是全部。至于其他的问题和解决方法是什么,可以引用Mehdi的original post .它很长但很棒。

    关于entity-framework - EF Core 3 的 DbContextScope 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59564868/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com