162 votes

Puis-je générer le script d'une migration avec le code EF en premier et .net core

Je suis en train de construire une application MVC avec .Net Core et j'ai besoin de générer le script d'une migration.

Avec EF6, j'ai exécuté la commande

update-database -script

mais lorsque j'essaie de faire la même chose avec .net Core, l'exception suivante se produit :

Update-Database : Impossible de trouver un paramètre correspondant au paramètre nom 'script'.

Savez-vous s'il existe un équivalent pour EF Core ?

228voto

Gasper Points 1021

Conformément à Documentation EF vous pouvez utiliser Script-Migration commandement.

Si vous voulez juste script toutes les migrations, vous pouvez simplement l'appeler depuis la console du Package Manager comme ça. Si vous voulez juste script les changements de la dernière migration, vous pouvez l'appeler comme ceci :

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

Vérifiez la documentation, il y a quelques options supplémentaires pour la commande.

2 votes

L'outil script-migration ne semble pas fonctionner pour les downgrades (lorsque la migration To est plus ancienne que la migration From). Des idées sur la façon de générer un script 'undo' ?

1 votes

@Nullius vous ne voulez pas l'appeler, ou le voir comme un "undoScript" vous devez juste faire votre undo sur votre code et ensuite mettre à jour la Db et obtenir les scripts les plus récents....

1 votes

Nous avons un serveur de déploiement qui gère également les migrations de données. Par exemple, lorsqu'un déploiement est annulé, la base de données doit également être ramenée à l'état précédent. L'étape de construction qui gère les db-migrations, a besoin d'un script 'up' et 'down'. Nous avons découvert que la script-migration fonctionne également en spécifiant une migration To plus ancienne que la migration From. Cependant, il faut définir la migration To sur celle qui précède la migration que vous voulez réellement migrer. De plus, lorsque l'on essaie de générer un script 'descendant' pour la dernière migration, il faut utiliser 'ZZZZZZ' (ou similaire) pour le paramètre From migration.

55voto

AttackingMilo Points 211
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.

donc, vous pouvez essayer

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

Cela fonctionne en .Net Core 2.1

39voto

Ahmar Points 2456

Vous pouvez utiliser dotnet core cli pour générer script.

dotnet ef migrations script 

Vous pouvez aussi mettre ceci dans le fichier avec le nouveau power shell. out-file commandement.

dotnet ef migrations script | out-file ./script.sql

4 votes

Bon conseil, ou dans CMD : dotnet ef migrations script > script.sql

3 votes

Nouvelle syntaxe de out-file sera --output ./script.sql

19voto

Mike Points 31

Vous pouvez également générer un script pour annuler une migration en inversant les paramètres du script-Migration. Par exemple, si vous avez deux migrations, BadLatestMigration et GoodPreviousMigration, vous pouvez revenir à GoodPreviousMigration en utilisant la commande suivante .

Script-Migration BadLatestMigration GoodPreviousMigration 

Ensuite, assurez-vous de retirer la migration pour supprimer la mauvaise migration.

Remove-Migration

Cela fonctionne en .Net Core 2.2.0.

0 votes

Je cherchais le retour en arrière et ceci a résolu mon problème. Cela fonctionne avec EF Core 3.0.

9voto

Vaibhav Garg Points 980

Cela génère également seulement le SQL

Update-Database -script -TargetMigration TO -SourceMigration FROM

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X