在我的应用程序中,我使用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时)中获益。
有什么方法可以实现这个功能吗?
连接弹性 自动重试失败的数据库命令。它是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
,你可能需要实现自己的重试。