Откат неудачной миграции: EF Core MySQL - PullRequest
0 голосов
/ 04 мая 2020

Использование:

  • Pomelo.EntityFrameworkCore. MySQL 3.1.1
  • Microsoft.EntityFrameworkCore 3.1.3
  • MySQL 5.7

Похоже, что в случае сбоя команды update-database EF Core откат частичной миграции не выполняется. Это как это должно работать? Если так, мне интересно, почему? Что еще более важно, есть ли способ, чтобы откат происходил автоматически, или, по крайней мере, что-то, что можно запустить позже вручную, когда update-database сталкивается с ошибкой? Я пробовал что-то вроде этого:


protected override void Up(MigrationBuilder migrationBuilder)
{
    migrationBuilder.Sql("Start Transaction;");
...

    migrationBuilder.Sql("Commit;");
}

, но запуск Rollback; впоследствии ничего не делает. Спасибо!

1 Ответ

1 голос
/ 06 мая 2020

Похоже, что в случае сбоя команды update-database EF Core откат частичной миграции не выполняется. Это как это должно работать? Если да, то мне любопытно, почему?

Хотя EF Core и Pomelo поддерживают применение миграций как часть транзакции (и фактически делают это по умолчанию), MySQL сама будет неявно фиксировать каждый оператор изменения структуры в отдельности.

Для получения дополнительной информации см. следующие статьи:

Более важно, есть ли способ сделать откат автоматически, или, по крайней мере, что-то, что может быть запущено позже вручную, когда update-database сталкивается с ошибкой?

Единственный надежный способ безопасного применения миграций для MySQL - это откат вручную любых частично примененных миграций с помощью с помощью резервного копирования / восстановления:

  1. Резервное копирование базы данных
  2. Применение сценариев миграций
  3. Восстановление предыдущей резервной копии базы данных в случае сбоя миграции

Там Существуют ли другие системы баз данных, такие как SQL Сервер или PostgreSQL, которые поддерживают операторы, изменяющие структуру транзакций, но MySQL - нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...