连接重试策略

连接重试策略将自动重试已失败的数据库命令。 通过提供“执行策略”,它封装检测故障,然后重试命令所需的逻辑,该功能可以应用于任何数据库。 EF Core 提供程序针对特定数据库的失败条件提供定制的执行策略,同时提供最佳的重试策略。

重试策略配置

下面的示例将 DbContextOptions 配置为使用 Oscar 提供程序并配置重试策略:

var connectStrings ="Server=127.0.0.1;Port=2003;User Id=SYSDBA;Password=szoscar55;Database=OSRDB;";
optionsBuilder.UseOscar(connectStrings, optionsAction =>
{
    optionsAction.EnableRetryOnFailure(); // 配置重试策略
});

自定义执行策略

如果要更改任何默认值,则可以使用一种机制来注册自己的自定义执行策略。

var connectStrings ="Server=127.0.0.1;Port=2003;User Id=SYSDBA;Password=szoscar55;Database=OSRDB;";
optionsBuilder.UseOscar(connectStrings, optionsAction =>
{
    optionsAction.ExecutionStrategy(...);
});

执行策略和事务

在出现故障时自动重试的执行策略需要能够回滚失败的重试块中的每个操作。 启用重试后,通过 EF Core 执行的每个操作都将成为其自身的可重试操作。 也就是说,如果发生暂时性故障,每个查询和对 SaveChanges() 的每个调用都将作为一个单元重试。
如下代码:
using (var db = new UserContext())
{
    var strategy = db.Database.CreateExecutionStrategy();

    strategy.Execute(() =>
    {
        using (var context = new UserContext())
        {
            using (var transaction = context.Database.BeginTransaction())
            {
                // to do

                transaction.Commit();
            }
        }
    });
}

了解更多