2012-04-10 4 views
11

Я только что установил Entity Framework Migrations, добавил свойство класса и дал EF Migrations вихрь.Получение начального сценария миграции объектов Entity Framework

Моя база данных разработки была быстро обновлена. Все идет нормально.

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

Миграции я являюсь:

PM> Get-Migrations 
Retrieving migrations that have been applied to the target database. 
201204102238194_AutomaticMigration 
201203310233324_InitialCreate 
PM> 

Я думал, что я мог бы получить дельту-скрипт, используя следующее:

Update-Database -SourceMigration:201203310233324_InitialCreate -TargetMigration:201204102238194_AutomaticMigration -script 

Однако, это дает мне ошибку:

'201204102238194_AutomaticMigration' is not a valid migration. Explicit migrations must be used for both source and target when scripting the upgrade between them.

Просто чтобы посмотреть, что произойдет, я перевернул два параметра (обратная миграция) и получил скрипт, который я wou ld ожидает после добавления флага -force (новые столбцы сброшены).

Как я могу получить скрипт для этой первой миграции?

+0

Как вы получили первоначальную миграцию? Ваша автоматическая миграция должна содержать создание сценария для всей базы данных, чего вы не хотите - выполнение такого скрипта в существующей базе данных приводит к многочисленным ошибкам. Можете ли вы попробовать [этот подход] (http://www.ladislavmrnka.com/2012/03/ef-4-3-migrations-and-existing-database) вместо этого? –

+0

@Ladislav: Мне не нужен скрипт для всей базы данных, потому что моя вся (начальная) база данных уже находится в производстве. Я не могу понять, как перейти от первой базы данных, уже находящейся в производстве, до того, как я использовал Migrations, до моего самого первого обновления. Я уверен, что у Миграции есть моя первоначальная схема БД где-то там, потому что изменение параметров SourceMigration и TargetMigration вместе с * -force * создает скрипт для DROP моих новых столбцов. Я просто не могу заставить его перейти от исходной базы данных к первой новой итерации (добавьте несколько столбцов). –

ответ

14

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

Я думаю, что вам нужно вернуться к модели, совместимой с исходной схемой базы данных. Затем выполните следующую команду:

add-migration InitialSchema -IgnoreChanges 

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

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

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

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