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

Можно ли обновить производственную базу данных с помощью EF-миграций?

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

Я использовал сценарии обновления Schema в течение нескольких лет, и пока они работают, я планировал использовать EF-миграции вместо этого в будущем по следующим причинам:

  • Более быстрое развертывание, меньшее время простоя
  • Простейшая процедура развертывания
  • Гораздо проще переносить существующие данные, чем это было бы возможно с помощью T-SQL
  • Более понятный синтаксис изменений, ожидающих применения (класс DbMigration с чистым синтаксисом С# или неуклюжей миграцией T-SQL script в традиционной среде).
  • Существует простой и быстрый путь перехода к старой схеме db, если развертывание новой версии программного обеспечения должно завершиться неудачно.

Одна из причин, по которой я могу думать, что запретить использование EF для миграции производственной БД, будет заключаться в том, что DB-схема была изменена только администраторами баз данных, а не разработчиками. Тем не менее, я и DBA, и разработчик, поэтому в моем случае это не имеет значения.

Итак, каковы риски обновления производственной базы данных с использованием EF?

Изменить: я хотел бы добавить, что, как уже сказал solomon8718, я всегда вытаскиваю новую копию производственной базы данных на мой промежуточный сервер и тестирую EF Migrations для применения на промежуточном сервере, прежде чем применять их к производству сервер. IMO это важно для любого обновления схемы для производственной системы, независимо от того, использую ли я миграции EF или нет.

4b9b3361

Ответ 1

Хорошо, я все равно попробую ответить. Я бы сказал "Нет", нет причин не использовать "Первой мигрирования кода" в производстве. В конце концов, какой смысл этой простой в использовании системы, если вы не можете полностью ее преодолеть?

Самые большие проблемы, с которыми я вижу, - это все проблемы, которые могут возникнуть с любой системой, о которой вы уже говорили. Пока вся команда (DBA включена, если применимо) находится на борту, я думаю, что разрешение EF управлять схемой с помощью миграций является менее сложным и, следовательно, менее подверженным ошибкам, чем традиционное управление на основе script. Я бы все же взял резервную копию, прежде чем выполнять миграцию в производственной системе, но тогда вы все равно это сделаете.

Нет ничего, что говорит, что администратор базы данных не может выполнить миграцию из Visual Studio. Доступ по-прежнему может быть заблокирован с привилегиями на уровне базы данных, и он/она мог бы просмотреть миграцию (в случае полезного формата экспорта SQL с помощью -Script, если это необходимо) перед выполнением фактической операции. Затем они все еще находятся под контролем, но вы можете использовать первые преобразования кода. Черт, они могут даже полюбить его!

Обновление: с тех пор, как были созданы SPROC и TVF, мы также обрабатываем их в миграциях, хотя на самом деле они выполняются с помощью операторов SQL с использованием вызова DbMigration.Sql() в Up(), а наоборот - в Down() (Вы можете также использовать CreateStoredProcedure и DropStoredProcedure для простых SPROC, но я думаю, что вам все равно нужно определить тело в SQL). Наверное, вы могли бы сказать это оговорку; пока еще нет возможности для полной, всеобъемлющей базы данных, написанной исключительно на С#. Тем не менее, вы можете использовать миграции, которые включают SQL-скрипты для управления всей схемой. Одно из преимуществ, которое мы нашли в этом процессе, - это использовать файл конфигурации С# для имен объектов схемы (например, имена разных серверов для производства против dev) с помощью простого String.Format в сочетании с XML Transformation для самих файлов конфигурации.

Ответ 2

Да, есть хорошие причины не использовать автоматическую систему, такую ​​как First First Migrations для изменения производственной базы данных. Но, как всегда, существуют исключения из правил.

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

  • Другой причиной может быть ваш уровень доверия к инструменту Migrations. Мы уверены, что в этом инструменте нет ошибки? Что произойдет, если инструмент не пройдет на полпути? Вы уверены, что у вас есть обновленные резервные копии и процесс отката при необходимости?

  • Сценарии изменений могут выполнять неожиданные или неэффективные скрипты. Я испытал случаи, когда sql сгенерировал скопированные данные в таблицу temp, удалил исходную таблицу, а затем воссоздал исходную таблицу для таких вещей, как добавление нового столбца, если вы случайно (или целенаправленно) измените порядок отображения столбца, или при переименовании таблицы. Если задействованы миллионы записей, это может вызвать серьезные проблемы с производительностью.

Моя рекомендация:

Предполагая, что у вас есть промежуточная база данных, которая отражает вашу производственную схему, используйте инструмент "Миграции" для создания сценариев изменений в отношении этой системы. Мы обычно восстанавливаем нашу базу данных сцены из новой производственной копии перед запуском. Затем мы проверяем сценарии изменений вручную, чтобы проверить наличие проблем. После этого мы запускаем скрипты с нашей базой сцен, чтобы убедиться, что она выполняется правильно и что все ожидаемые изменения произошли. Теперь мы уверены, что сценарии безопасны для запуска в производстве и выполнения ожидаемых изменений. Этот процесс будет посвящен всем трем вопросам, перечисленным выше.

Ответ 3

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

EDIT: моя собственная перспектива через год после начала использования EF Migrations в производстве:

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

  • Проверьте миграцию в промежуточной системе. Я тестирую все миграции, полностью перейдя на сервер CI вплоть до и обратно, прежде чем запускать тесты интеграции.
  • Не запускайте миграцию автоматически, а с помощью командного файла, запускаемого администратором. Это по существу то же самое, что и запуск sql для миграции вручную в SSMS.

Ответ 4

Я использую его в производстве для нескольких проектов. Как только вы получите его, я думаю, что это хорошо.

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

Но всегда всегда используйте параметр -script с update-database и запускайте сам SQL.

Я бы также советовал не использовать опцию обновления db из веб-развертывания. Таким образом, невозможно определить, какая часть миграции уже была запущена при ошибке. Я несколько раз сталкивался с проблемой. Поэтому лучше всего получить SQL и запустить его вручную.