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

Как использовать миграции в существующем db в производстве, созданным с использованием Entity Framework 4.1?

У меня есть система в производстве, которая была создана с Entity Framework 4.1 Code First. Теперь я обновился до 4.3 и вам необходимо применить миграции, но есть несколько случаев использования, которые мне необходимо охватить:

  • Новый разработчик нуждается в базе данных, созданной с нуля, с данными семян. (Метод Seed() также применяет некоторые уникальные индексы.)
  • Производственная среда должна использовать только непримененные изменения. (Но имейте в виду, что эта БД была создана в EF 4.1, у которой нет миграций.)

Как создать миграцию и инициализатор (или инициализаторы) для покрытия обоих этих случаев?

4b9b3361

Ответ 1

Поскольку ваша производственная база данных была создана с помощью EF 4.1, вам нужно будет немного поработать, чтобы подготовить ее к использованию Migrations. Начните с копии текущего производственного кода, работающего в dev environmentemnt. Убедитесь, что база данных dev не существует.

  • Обновите проект, чтобы использовать EF 4.3 (или более поздняя версия) с помощью Migrations и создайте первоначальную миграцию на моментальный снимок, что сейчас выглядит в настоящее время.

    Update-Package EntityFramework
    Enable-Migrations
    Add-Migration InitialCreate  
    
  • Замените инициализаторы базы данных на соответствующий код миграции.

    Для данных семени добавьте его в метод Seed() файла Migrations\Configuration.cs. Обратите внимание, что в отличие от метода Seed() в инициализаторах этот метод запускается каждый раз, когда вызывается Update-Database. Возможно, потребуется обновить строки (reset исходные данные) вместо их вставки. Этот способ может помочь AddOrUpdate().

    Поскольку ваши уникальные имена теперь могут быть созданы с помощью Migrations, вы должны добавить их в метод Up() миграции InitialCreate. Вы можете либо связать их с вызовами CreateTable(), используя метод Index(), либо вызвав CreateIndex().

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

  • Получите script, чтобы загрузить исходную среду.

    Update-Database -Script
    

    Из созданного script, вы хотите удалить почти все, так как существуют таблицы. Необходимые части - это инструкции CREATE TABLE [__MigrationHistory] и INSERT INTO [__MigrationHistory].

  • По желанию, отбросьте таблицу EdmMetadata, так как она больше не нужна.

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