¿Puedo generar un script de una migración con código EF primero y .net core?

83

Estoy construyendo una aplicación MVC con .Net Core y necesito generar el script de una migración.

Con EF6 ejecuté el comando

update-database -script

pero cuando trato de hacer lo mismo con .net Core, lanzo la siguiente excepción:

Base de datos de actualización: no se puede encontrar un parámetro que coincida con el nombre del parámetro 'script'

¿Sabes si existe un equivalente para EF Core?

Gabriel Castillo Prada
fuente

Respuestas:

123

Según la documentación de EF , puede usar Script-Migrationcommand.

Si solo desea crear un script de todas las migraciones, simplemente puede llamarlo desde la consola de Package Manager de esa manera. Si solo desea programar los cambios de la última migración, puede llamarlo así:

Script-Migration -From <PreviousMigration> -To <LastMigration>

Asegúrese de consultar los documentos, hay algunas opciones más para el comando.

Pito
fuente
1
La herramienta de migración de secuencias de comandos no parece funcionar para degradaciones (cuando la migración A es anterior a la migración Desde). ¿Alguna idea sobre cómo generar un script de 'deshacer'?
Nullius
1
@Nullius no quiere llamarlo, o verlo como si fuera un "deshacer script", solo necesita deshacer su código y luego actualizar Db y obtener los scripts más nuevos ...
Haithem KAROUI
1
Tenemos un servidor de implementación que también gestiona las migraciones de db. Por ejemplo: cuando se revierte una implementación, también la base de datos debe ser degradada al estado anterior. El paso de compilación que gestiona las migraciones de db necesita un script "up" y "down". Descubrimos que la migración de scripts también funciona cuando se especifica una migración A más antigua que la migración Desde. Sin embargo, se debe establecer la migración A en la que ANTES de la migración que realmente desea migrar. Además, al intentar generar un script "hacia abajo" para la última migración, se debe utilizar "ZZZZZZ" (o similar) para el parámetro de migración Desde.
Nullius
2
¿Qué pasa si estoy tratando de generar un script para la Primera migración? No hay
migración
2
@tchelidze Para programar la migración inicial, establezca el parámetro -From en 0. Por ejemplo, Script-Migration
-From
19

Puede usar dotnet core cli para generar un script

dotnet ef migrations script 

También puede poner esto en un archivo con el nuevo out-filecomando de power shell .

dotnet ef migrations script | out-file ./script.sql
Ahmar
fuente
1
Buen consejo, o en CMD: script de migraciones de dotnet ef> script.sql
Tore Aurstad
11
dotnet ef migrations script --help

Usage: dotnet ef migrations script [arguments] [options]

Arguments:
  <FROM>  The starting migration. Defaults to '0' (the initial database).
  <TO>    The ending migration. Defaults to the last migration.

Options:
  -o|--output <FILE>                     The file to write the result to.
  -i|--idempotent                        Generate a script that can be used on a database at any migration.
  -c|--context <DBCONTEXT>               The DbContext to use.
  -p|--project <PROJECT>                 The project to use.
  -s|--startup-project <PROJECT>         The startup project to use.
  --framework <FRAMEWORK>                The target framework.
  --configuration <CONFIGURATION>        The configuration to use.
  --runtime <RUNTIME_IDENTIFIER>         The runtime to use.
  --msbuildprojectextensionspath <PATH>  The MSBuild project extensions path. Defaults to "obj".
  --no-build                             Don't build the project. Only use this when the build is up-to-date.
  -h|--help                              Show help information
  -v|--verbose                           Show verbose output.
  --no-color                             Don't colorize output.
  --prefix-output                        Prefix output with level.

entonces, puedes intentar

dotnet ef migrations script ver1 ver2
dotnet ef migrations script ver1 ver2 -o ./script.sql

Esto funciona en .Net Core 2.1

AtacandoMilo
fuente
10

También puede generar un script para revertir una migración invirtiendo los parámetros a Script-Migration. Por ejemplo, si tiene dos migraciones, BadLatestMigration y GoodPreviousMigration, puede volver a GoodPreviousMigration mediante el siguiente comando

Script-Migration BadLatestMigration GoodPreviousMigration 

Luego, asegúrese de Eliminar-Migración para eliminar la migración incorrecta

Remove-Migration

Esto funciona en .Net Core 2.2.0

Miguel
fuente
Estaba buscando la reversión y esto me lo resolvió. funciona en EF Core 3.0
Sehab
5

Esto también genera solo el SQL

Update-Database -script -TargetMigration TO -SourceMigration FROM
Vaibhav Garg
fuente
6
Esto es cierto para EF5, no creo que funcione en EF6 o EF core
Yuval Perelman