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

时间:2019-01-09 16:34:32

标签: identityserver4 ef-core-2.2

就我而言,我有几个共享同一数据库的EF上下文(即,所有表都在同一个db上),并且我想在所有上下文之间共享相同的SqlConnection,以便可以在内部应用多个更改同一笔交易。

为了实现这一点,我首先使用以下代码注册了SqlConnection

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

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

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

options.UseSqlServer(provider.GetRequiredService()));

注册配置和操作存储时,我需要做类似的事情。与EF扩展方法不同,没有重载,它使我可以传递引用选项构建器和服务提供者的Action:

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确实有重载,可以让我通过连接,但是如何在运行时解析SqlConnection,以便在所有上下文中共享同一连接?

谢谢

路易斯

1 个答案:

答案 0 :(得分:1)

man本人回答:)

应该使用CondigureDbContext来代替ResolveDbContextOptions属性:

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