Semilla de migración de Script EF desde la clase de configuración


Tengo migraciones EF funcionando bien, pero también quiero generar el script sql para los datos semilla de mi clase DbMigrationsConfiguration. Los datos seed se ejecutan bien cuando hago Update-Database, pero cuando hago UpdateDatabase-Script no obtengo el sql para los insertos seed. He intentado-Verbose en una base de datos de Actualización normal, pero no veo la salida de las sentencias seed allí tampoco.

Es esto posible?

Author: Ladislav Mrnka, 2012-05-02

3 answers

No, no es posible. La clase de configuración no es parte de la migración en sí, es la infraestructura que ejecuta la migración. Tiene una sola clase de configuración para todas sus migraciones y su método Seed se ejecuta después de cada ejecución de migración - incluso puede usar contexto para sembrar datos y debido a eso este método se ejecuta después de que se complete la migración = no puede ser parte de la migración. Solo el contenido de la clase de migración está escrito.

 18
Author: Ladislav Mrnka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-03 08:23:18

Otra solución / solución es hacer que los SSMS generen el script por usted:

1) Comience con una base de datos limpia generada por su inicializador de base de datos y método seed. Asegúrese de que los datos que desea scripted está allí.

2) Usando SSMS, haga clic derecho en la base de datos, vaya a Tareas > "Generar scripts...", y seguir al mago. En Opciones avanzadas, asegúrese de seleccionar " Solo datos "para"Tipos de datos a script".

3) Desde el script generado, copie las instrucciones seed requeridas a su script de destino.

 9
Author: Tawab Wakil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-30 18:34:10

Sé que es un poco de un hilo viejo, pero, aquí hay una respuesta que podría ayudar a alguien más en busca de una respuesta.

Puede utilizar la migración.exe suministrado por Entity Framework. Esto le permitirá ejecutar el método Seed en el contexto de la base de datos.

Si necesita ejecutar un método Seed específico, puede colocarlo en un archivo de configuración de migración separado como este:

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

Orden:

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

Búscalo en el directorio NuGet packages: "..\ packages\EntityFramework.6.1.3 \ tools "

Puede especificar la configuración de migración como argumento. El CustomConfig debe contener su método Semilla basado en código. Por lo tanto, de esta manera no requiere que se generen scripts SQL a partir de la migración.

Más información aquí:

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

Con esta solución, no necesita generar un script SQL y puede ejecutar múltiples Semillas para diferentes entornos.

 4
Author: Maulik Patel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-19 12:36:42