Обработка временных сбоев в .net core 2.1 MVC для базы данных MySQL - PullRequest
1 голос
/ 30 марта 2019
services.AddDbContext<MyContext>(options =>
{
    options.UseSqlServer(mysqlConnection,
    sqlServerOptionsAction: sqlOptions =>
    {
        sqlOptions.EnableRetryOnFailure(
        maxRetryCount: 10,
        maxRetryDelay: TimeSpan.FromSeconds(30),
        errorNumbersToAdd: null);
    });
});

Я нашел этот фрагмент кода по адресу:

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

Моя БД - MySQL 5.7

Я изменил приведенный выше код на:

enter image description here

Это означает, что EnableRetryOnFailure недоступен для БД MySQL.Как мне теперь установить политики повторов, задержек и т. Д.?

Также, если я пытаюсь установить функцию ExecutionStrategy, я получаю это:

enter image description here

Затем я попытался создать свою собственную стратегию, используя:

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

, но как использовать этот класс сейчас?

1 Ответ

2 голосов
/ 30 марта 2019

Для этого есть библиотека: 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); 
        }
    ));
    
...