ASP. NET CORE DI - Разрешить IDbConnection из базы данных EF Core.GetDbConnection () - PullRequest
0 голосов
/ 03 мая 2020

В моем приложении я использую EF Core DbContext в большинстве мест, где требуется доступ к данным. Также там, где требуется базовое соединение, я просто ввожу DbContext и получаю соединение, используя DbContext.Database.GetDbConnection(). В одной из библиотек классов (где ef core context не может быть введен) мне нужно внедрить IDbConnection, чтобы получить доступ к базе данных.

Я пытался

services.AddScoped<IDbConnection>(sp=>sp.GetRequiredService<MyContext>().Database.GetDbConnection())

, но выдает исключение stackoverflow.

В настоящее время я использую следующее -

services.AddScoped<IDbConnection>(sp=>new SqlConnection(connStringFromConfig))

, которое работает, но я ищу альтернативу, которая может извлечь выгоду из устойчивости соединения / ExecutionStrategy (когда используется EnableRetryOnFailures) который встроен в базовое соединение DbContext.

Есть ли способ достичь этого?

1 Ответ

0 голосов
/ 03 мая 2020

Устойчивость соединения автоматически повторяет неудачные команды базы данных. Это функция Entity Framework Core и может быть настроена обычно в методе OnConfiguring для DbContext или в файле Startup.cs в методе ConfigureServices.

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder
        .UseSqlServer("<connection string>", options => options.EnableRetryOnFailure());
}

Эта функция связана с EntityFramework, это не является прямой функцией SqlConnection. Когда вы используете SqlConnection (или интерфейс IDbConnection) в своем проекте и не используете DbContext, вам, вероятно, потребуется реализовать свою собственную повторную попытку.

...