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

services.AddDbContext(options =>{options.UseSqlServer(mysqlConnection,sqlServerOptionsAction: sqlOptions =>{sqlOptions.EnableRetryOnFailure(maxRetryCount: 10,maxRetryDelay: TimeSpan.FromSeconds(30),errorNumbersToAdd: null);});});

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

这意味着 EnableRetryOnFailure 不适用于 MySQL 数据库.我现在如何设置重试、延迟等政策?

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

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

公共类MyStrategy:ExecutionStrategy{......}

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

解决方案

有一个用于此的库:https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

设置步骤:

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

  2. 将此使用添加到您的类:

    使用 Pomelo.EntityFrameworkCore.MySql.Infrastructure;

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

    services.AddDbContextPool(选项 =>options.UseMySql("Server=localhost;Database=ef;User=root;Password=123456;",mySqlOptions =>{mySqlOptions.ServerVersion(新版本(5, 7, 17), ServerType.MySql).EnableRetryOnFailure(maxRetryCount: 10,maxRetryDelay: TimeSpan.FromSeconds(30),errorNumbersToAdd: null);}));

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

I found this code snippet at:

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

My DB is MySQL 5.7

I changed the above code to :

That means EnableRetryOnFailure is not available for MySQL DB. How do i set the retry, delay etc.. policies now?

Also if i try to set the ExecutionStrategy function i get this:

Then i tried Create my own Strategy using:

public class MyStrategy: ExecutionStrategy
{
   ......
}

but how to use this class now?

解决方案

There is a library for this: https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

Setup steps:

  1. Donwload Pomelo.EntityFrameworkCore.MySql from NuGet.

  2. Add this using to your class:

    using Pomelo.EntityFrameworkCore.MySql.Infrastructure;

  3. Add this to your ConfigureServices method:

    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); 
        }
    ));
    

相关文章