ASP.NET CORE DI - 从EF Core的Database.GetDbConnection()解析IDbConnection。

问题描述 投票:0回答:1

在我的应用程序中,我使用EF Core DbContext 在大多数需要数据访问的地方。另外,凡是需要底层连接的地方,我只需注入 DbContext 并使用 DbContext.Database.GetDbConnection().在其中一个类库中--(在那里ef核心上下文不可能注入),我需要注入IDbConnection来让db访问工作。

我尝试了

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

但它会抛出stackoverflow异常。

目前,我使用以下方法

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

但我正在寻找一个替代方案,它可以从DbContext的底层连接内置的连接弹性执行策略(当使用EnableRetryOnFailures时)中获益。

有什么方法可以实现这个功能吗?

c# dependency-injection asp.net-core-2.2 ef-core-2.2
1个回答
0
投票

连接弹性 自动重试失败的数据库命令。它是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,你可能需要实现自己的重试。

© www.soinside.com 2019 - 2024. All rights reserved.