IdentityServer4: повторно использовать SqlConnection при вызове метода расширения AddConfigurationStore - PullRequest
0 голосов
/ 09 января 2019

В моем случае у меня есть несколько контекстов EF, которые совместно используют одну и ту же базу данных (т. Е. Все таблицы находятся на одной и той же базе данных), и я хотел бы использовать один и тот же SqlConnection среди всех контекстов, чтобы я мог применить несколько изменений внутри та же транзакция.

Чтобы добиться этого, я начал с регистрации SqlConnection со следующим кодом:

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

После этого я изменил один из контекстов EF, чтобы он снова использовал то же соединение:

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

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

Мне нужно сделать что-то подобное при регистрации конфигурации и оперативного хранилища. В отличие от метода расширения 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 имеет перегрузку, которая позволяет мне передавать соединение, но как я могу разрешить SqlConnection во время выполнения, чтобы одно и то же соединение было общим для всех контекстов?

Спасибо

Луис

1 Ответ

0 голосов
/ 10 января 2019

Ответил человек сам :)

Вместо использования свойства CondigureDbContext следует использовать ResolveDbContextOptions:

.AddConfigurationStore(options => {
     options.ResolveDbContextOptions = (provider, builder) => 
     builder.UseSqlServer(provider.GetRequiredService<Foo>().FooValue);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...