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

Script Семя миграции EF из класса конфигурации

У меня EF-миграции работают красиво, но я также хочу сгенерировать sql script для семенных данных из моего класса DbMigrationsConfiguration. Исходные данные работают нормально, когда я делаю Update-Database, но когда я делаю UpdateDatabase - Script, я не получаю sql для семенных вставок. Я попробовал -Verbose на обычной обновленной базе данных, но я не вижу, чтобы семенные операторы выводились там.

Возможно ли это?

4b9b3361

Ответ 1

Нет, это невозможно. Класс конфигурации не является частью самой миграции - это инфраструктура, выполняющая миграцию. У вас есть один класс конфигурации для всех ваших миграций, и его метод Seed выполняется после каждого прогона миграции - вы даже можете использовать контекст для посева данных, и из-за этого этот метод выполняется после завершения миграции = он не может быть частью миграции, Сконструировано только содержимое класса миграции.

Ответ 2

Другим решением/обходным решением является создание SSMS для script для вас:

1) Начните с чистой базы данных, созданной вашим инициализатором базы данных и методом семени. Убедитесь, что данные, которые вы хотите создать, находятся там.

2) Используя SSMS, щелкните правой кнопкой мыши базу данных, откройте "Задачи" > "Сгенерировать скрипты..." и следуйте указаниям мастера. В разделе Дополнительные параметры обязательно выберите "Только данные" для "Типы данных в script".

3) Из сгенерированного script скопируйте необходимые семенные заявления в вашу целевую script.

Ответ 3

Я знаю, что это бит старого потока, но вот ответ, который может помочь кому-то еще найти ответ.

Вы можете использовать Migrate.exe, поставляемый Entity Framework. Это позволит вам запустить метод Seed в контексте базы данных.

Если вам нужно запустить определенный метод Seed, вы можете поместить его в отдельный файл конфигурации миграции следующим образом:

Enable-Migrations -MigrationsDirectory "Migrations\ContextA" -ContextTypeName MyProject.Models.ContextA

Команда:

Migrate.exe MyAssembly CustomConfig /startupConfigurationFile="..\web.config"

Ищите его в каталоге пакетов NuGet: "..\packages\EntityFramework.6.1.3\tools"

Вы можете указать конфигурацию миграции в качестве аргумента. CustomConfig должен содержать метод Seed, основанный на коде. Итак, таким образом, вы не должны генерировать SQL-скрипты из миграции.

Подробнее здесь:

http://www.eidias.com/blog/2014/10/13/initialcreate-migration-and-why-is-it-important

http://www.gitshah.com/2014/06/how-to-run-entity-framework-migrations.html

Используя это решение, вам не нужно генерировать SQL script и может запускать несколько семян для разных сред.