0

我的 IT 人员刚刚将我们的 MySQL 数据库更新到了一个新的集群,现在我收到了类似以下的暂时错误:

引发了一个异常,可能是由于暂时性故障。考虑通过将“EnableRetryOnFailure()”添加到“UseMySql”调用来启用瞬时错误恢复能力。

因此,经过研究,我添加了以下代码:

options.UseMySQL(Configuration.GetConnectionString(connectionString),
    options => options.EnableRetryOnFailure
        (
            maxRetryCount: 10,
            maxRetryDelay: TimeSpan.FromSeconds(30),
            errorNumbersToAdd: null
        )
    );
});

然后,不幸的是导致了一个新错误:

错误 CS1061“MySQLDbContextOptionsBuilder”不包含“EnableRetryOnFailure”的定义并且没有可访问的扩展方法“EnableRetryOnFailure”

我不知道我是否缺少参考,但智能感知无济于事

所以,我做更多的研究并在这里找到信息https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html和这里https://entityframeworkcore.com/knowledge-base/57595183 /using-entity-framework-with-multiple-databases-and-providers-in-the-same-project--sql-server-and-mysql-关于使用 MySQL 中的这一行:

SetExecutionStrategy("MySql.Data.MySqlClient", () => new MySqlExecutionStrategy());

这也会引发错误。

有谁知道我如何使用 MySQL 实现连接弹性/重试逻辑?

.Net 5、MySQL 5.7、MySqlConnector 8.0.20

4

1 回答 1

0

遵循此https://docs.microsoft.com/en-us/dotnet/architecture/microservices/implement-resilient-applications/implement-resilient-entity-framework-core-sql-connections

利用

services.AddDbContext<AppDbContext>(options =>
{
    string connectionString = AppConfig.Configuration.GetConnectionString("DefaultConnection");
    options.UseMySql(connectionString,
        ServerVersion.AutoDetect(connectionString),
        mySqlOptions =>
            mySqlOptions.EnableRetryOnFailure(
                maxRetryCount: 10,
                maxRetryDelay: TimeSpan.FromSeconds(30),
                errorNumbersToAdd: null);
        );
});
于 2021-07-21T20:52:46.273 回答