Сценарий развертывания Mysql, созданный в EF Core 5.0, не поддерживает откат транзакций DDL

#mysql #entity-framework-core #pomelo-entityframeworkcore-mysql

Вопрос:

Мы используем EF core 5.0 с поставщиком баз данных pomelo mysql. Мы создаем идемпотентный sql-скрипт для добавления миграции с помощью команд миграции efcore. Мы заметили, что транзакции не откатываются, если есть ошибки подключения к БД или тайм-аута.

Как мы можем гарантировать, что сгенерированный сценарий является идемпотентным, поскольку в существующем состоянии он ведет себя неправильно.

Комментарии:

1. Почему сценарий должен быть идемпотентным? Для меня это действительно не имеет смысла.

2. Идея идемпотентного сценария состоит в том, чтобы применять только новые миграции, используя состояние миграции, сохраненное в вашей базе данных. Ядро EF поддерживает эту функцию (см.): идемпотентный sql-скрипт

Ответ №1:

К сожалению, это ограничение MySQL, а не проблема с Помело. MySQL не соблюдает транзакции, когда дело доходит до инструкций DDL.

Однако инструкции INSERT/UPDATE должны быть откатаны правильно.

Таким образом, единственный безопасный способ применить миграцию-это сначала создать резервную копию вашей базы данных, а затем применить сценарий миграции. Если его выполнение завершится неудачно, вы восстановите резервную копию.

Это некрасиво, но это работает.