4

Очень коротко:Управление EF Code First Миграция между разработкой и производством

I осуществляет EF Миграцию на существующий проект, построенный в качестве кода Первой основаны на статью Ladislav Mrnka

При реализации EF Миграции на проект, который уже запущен в производство, как можно управлять сценариями миграции между обновлениями, применяемыми к Development, а затем скриптами, сгенерированными для Production?

Причина, по которой я озадачен, заключается в том, что для MigrationId, сгенерированного для каждого скрипта, был добавлен TimeStamp. В моих попытках миграции я заметил, что записи, записанные в таблицах __MigrationHistory на dev и prod, различны, что поднимает вопрос, если БД должна пройти немало обновлений миграции, тогда, если бы по какой-либо причине требовалось понижение рейтинга , было бы очень трудно сотрудничать связать точную MigrationId для создания сценариев с помощью update-database -script


очень прямо вперед процесс, в котором вы создаете $InitialMigration, который создает __MigrationHistory таблицу. Затем любые изменения в вашей модели сопровождаются любыми update-database для получения базы данных Миграция. И этот процесс циклируется всякий раз, когда у вас есть логически сгруппированная партия изменений модели.

взгляда в __MigrationHistory стола показал

+------------------------------------+-------------------------+------------------------------------------------------------------+----------------+ 
|   MigrationId    |  CreatedOn  |        Model        | ProductVersion | 
+------------------------------------+-------------------------+------------------------------------------------------------------+----------------+ 
| 000000000000000_BootstrapMigration | 2012-03-01 17:40:39.567 | 0x1F8B08000000400ECBD07601C49...HASH_TRUNCATED...CA7F54A20F50000 | 4.3.1   | 
| 201203011745335_AutomaticMigration | 2012-03-01 17:45:33.557 | 0x1F8B08000000400ECBD07601C49...HASH_TRUNCATED...F4AE3681EF50000 | 4.3.1   | 
+------------------------------------+-------------------------+------------------------------------------------------------------+----------------+ 
+0

Как именно вы достигли того, что временные метки в базе данных prod и dev различны? Используете ли вы инициализатор базы данных для обновления БД? –

+0

Изначально после включения миграции в стабильную сборку я запустил 'update-database', чтобы создать таблицу миграции с записью 00_bootstrap. Теперь я сменил модель и запустил «Update-Database -Script» для создания сценария для производственной базы данных, а затем «Update-Database», чтобы перенаправить Dev DB. Теперь выполнение sql, сгенерированного предыдущим шагом в Prod DB, создает запись в таблице MigrationsHistory как 'TIMESTAMP01_AutomaticMigration', тогда как более поздняя команда в Dev DB вставила запись в Dev DB с другим TimeStamp, поскольку две команды были пробегите несколько моментов. – bPratik

ответ

3

Согласно вашему комментарию это выглядит как решение прямо вперед. Если вы хотите иметь такую ​​же метку времени вы должны использовать Update-Database только один раз и в вашем случае это означает использование:

Update-Database -Script 

и выполнения созданного сценария на обеих базах данных.

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

+0

А, да, тот же подход к сценарию имеет смысл! то, что я сделал вчера, было глубже погружено в «Add-Migration», а также создание правильных сценариев изменений в виде файлов C# с верхними и нижними блоками. (Http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-automatic-migrations-walkthrough.aspx). Спасибо за ваше понимание, хотя! – bPratik

Смежные вопросы