Подтвердить что ты не робот

Непрерывная интеграция с EF Code Первые миграции

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

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

Является ли это надежным/возможным/рекомендуется создавать миграции и автоматически обновлять базу данных?

Например:

У меня есть пользователь с именем userId и именем пользователя. Затем я добавляю возраст к возрасту в код. В текущем сценарии мне потребуется создать миграцию, которая зафиксирует это изменение, а затем я проведу изменения в управлении версиями. Непрерывная интеграция обнаружит это изменение и развернет новую версию. Мне нужно вручную обновлять базу данных (которая должна быть автоматизирована).

Могу ли я также отказаться от генерации миграции, так что я могу просто добавить возраст свойства к коду, и непрерывная интеграция приведет к этой миграции. Не уверен, что это рекомендуется.

4b9b3361

Ответ 1

Ответ - да, но не совсем так, как вы описываете.

Вы должны и должны вручную генерировать миграцию. Не все миграции могут создаваться автоматически, и в этих случаях необходима ручная модификация сгенерированной миграции. Разделение столбцов, некоторые типы изменений типа данных и т.д.

Затем ваш CI-сервер может использовать файл migrate.exe, чтобы ваши базы данных синхронизировались с вашей моделью. Трудная часть - обработка миграций, которые приводят к понижению. Поэтому переход от v1 к v2 прост, но от v2 до v1 сложнее, поскольку только сборка v2 знает, как получить "назад" к v1.

В результате я создал настраиваемый инструмент, который интеллектуально выполнял миграции и автоматически определял, какую модель (контекстную) сборку использовать для миграции. Вы можете получить представление о том, как это сделать здесь: Первые шаги миграции EF для развертывания более старой версии

Конечный результат заключается в том, что я могу проверить изменение/перенос модели и знать, что мое изменение db будет автоматически развернуто в любой среде, которая является частью моего конвейера ci/cd, и да, что абсолютно включает в себя производство.

Ответ 2

Часть непрерывной интеграции также является возможностью отката плохих изменений, если они не проходят тесты.

  • Вы пишете сценарии обновления базы данных таким образом, чтобы их можно было также понизить?
  • Создаете ли вы резервные копии резервных копий для каждой фиксации?
  • Вы потеряли бы данные в базе данных в случае резервного копирования/восстановления при плохих коммитах?
  • Что такое плохое изменение в самом DDL?

Вот некоторые из вопросов, о которых вы должны подумать, прежде чем внедрять их.