В моем случае у меня есть несколько контекстов 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 во время выполнения, чтобы одно и то же соединение было общим для всех контекстов?
Спасибо
Луис