.net core 2.1 MVC for MySQL 数据库中的瞬时故障处理

ABC*_*DEF 3 mysql entity-framework-core .net-core asp.net-core

services.AddDbContext<MyContext>(options =>
{
    options.UseSqlServer(mysqlConnection,
    sqlServerOptionsAction: sqlOptions =>
    {
        sqlOptions.EnableRetryOnFailure(
        maxRetryCount: 10,
        maxRetryDelay: TimeSpan.FromSeconds(30),
        errorNumbersToAdd: null);
    });
});
Run Code Online (Sandbox Code Playgroud)

我在以下位置找到了此代码片段:

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

我的数据库是 MySQL 5.7

我将上面的代码更改为:

在此处输入图片说明

这意味着 EnableRetryOnFailure 不适用于 MySQL DB。我现在如何设置重试、延迟等策略?

另外,如果我尝试设置 ExecutionStrategy 函数,我会得到这个:

在此处输入图片说明

然后我尝试使用以下方法创建自己的策略:

public class MyStrategy: ExecutionStrategy
{
   ......
}
Run Code Online (Sandbox Code Playgroud)

但是现在如何使用这个类?

huj*_*omi 10

有一个库:https : //github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

设置步骤:

  1. Pomelo.EntityFrameworkCore.MySql从 NuGet下载。

  2. 将此添加到您的课程中:

    using Pomelo.EntityFrameworkCore.MySql.Infrastructure;

  3. 将此添加到您的ConfigureServices方法中:

    services.AddDbContextPool<ApplicationDbContext>( 
    options => options.UseMySql("Server=localhost;Database=ef;User=root;Password=123456;",
    
        mySqlOptions =>
        {
            mySqlOptions.ServerVersion(new Version(5, 7, 17), ServerType.MySql)
            .EnableRetryOnFailure(
            maxRetryCount: 10,
            maxRetryDelay: TimeSpan.FromSeconds(30),
            errorNumbersToAdd: null); 
        }
    ));
    
    Run Code Online (Sandbox Code Playgroud)


Sea*_*urn 6

如果您使用的是 .NET 5,为了避免这种情况does not contain a definition for 'ServerVersion',您可以使用以下命令:

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);
        );
});
Run Code Online (Sandbox Code Playgroud)