代码之家  ›  专栏  ›  技术社区  ›  Luis Abreu

IdentityServer4:调用AddConfigurationStore扩展方法时重用SqlConnection

  •  1
  • Luis Abreu  · 技术社区  · 6 年前

    在我的例子中,我有几个EF上下文共享同一个数据库(即,所有表都在同一个数据库中),我希望在所有上下文中共享同一个SqlConnection,以便在同一事务中应用多个更改。

    为了达到这个目的,我首先注册了 SqlConnection

    services.AddScoped(sp => new SqlConnection(Configuration.GetConnectionString("DefaultConnection")));
    

    完成此操作后,我更改了一个EF上下文,以便它重用相同的连接:

    services.AddDbContext<ApplicationDbContext>((provider, options) =>
    

    注册配置和操作存储时,我需要执行类似的操作。与EF扩展方法不同,没有重载允许我传递引用选项生成器和服务提供程序的操作:

    services.AddIdentityServer()
                .AddConfigurationStore(options =>
                {
                    // HERE: no serviceprovider, how can I get the SqlConnection object???
                    options.ConfigureDbContext = builder =>
                        builder.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
                            sql => sql.MigrationsAssembly(migrationsAssembly));
                })
    

    builder.UseSqlServer

    谢谢,

    路易斯

    1 回复  |  直到 6 年前
        1
  •  1
  •   Luis Abreu    6 年前

    man 他自己:)

    而不是使用 CondigureDbContext 属性,您应该使用 ResolveDbContextOptions

    .AddConfigurationStore(options => {
         options.ResolveDbContextOptions = (provider, builder) => 
         builder.UseSqlServer(provider.GetRequiredService<Foo>().FooValue);
    })
    
    推荐文章