【问题标题】:Transient Failure handling in .net core 2.1 MVC for MySQL Database.net core 2.1 MVC for MySQL 数据库中的瞬态故障处理
【发布时间】:2019-08-21 06:47:00
【问题描述】:
services.AddDbContext<MyContext>(options =>
{
    options.UseSqlServer(mysqlConnection,
    sqlServerOptionsAction: sqlOptions =>
    {
        sqlOptions.EnableRetryOnFailure(
        maxRetryCount: 10,
        maxRetryDelay: TimeSpan.FromSeconds(30),
        errorNumbersToAdd: null);
    });
});

我在以下位置找到了这段代码 sn-p:

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 数据库。我现在如何设置重试、延迟等策略?

另外,如果我尝试设置 ExecutionStrategy 功能,我会得到:

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

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

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

【问题讨论】:

    标签: mysql asp.net-core .net-core entity-framework-core


    【解决方案1】:

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

    设置步骤:

    1. 从 NuGet 下载 Pomelo.EntityFrameworkCore.MySql

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

    【讨论】:

    • 我收到此错误:CS1061 'MySQLDbContextOptionsBuilder' 不包含'ServerVersion' 的定义,并且没有可访问的扩展方法'ServerVersion' 接受'MySQLDbContextOptionsBuilder' 类型的第一个参数
    • 如果你在github上查看源码,好像有:github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/…你下载了哪个版本的nuget包?
    【解决方案2】:

    如果您使用的是 .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);
            );
    });
    

    【讨论】:

      猜你喜欢
      • 2016-07-26
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      相关资源
      最近更新 更多