#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 должны быть откатаны правильно.
Таким образом, единственный безопасный способ применить миграцию-это сначала создать резервную копию вашей базы данных, а затем применить сценарий миграции. Если его выполнение завершится неудачно, вы восстановите резервную копию.
Это некрасиво, но это работает.