Script Семя миграции EF из класса конфигурации
У меня EF-миграции работают красиво, но я также хочу сгенерировать sql script для семенных данных из моего класса DbMigrationsConfiguration.
Исходные данные работают нормально, когда я делаю Update-Database, но когда я делаю UpdateDatabase - Script, я не получаю sql для семенных вставок. Я попробовал -Verbose на обычной обновленной базе данных, но я не вижу, чтобы семенные операторы выводились там.
Возможно ли это?
Ответы
Ответ 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 и может запускать несколько семян для разных сред.