164 votes

Générer un script SQL complet à partir de migrations EF 5 Code First

Comment utiliser les migrations Code First d'Entity Framework 5 pour créer une base de données complète script depuis l'état initial (vide) jusqu'à la dernière migration ?

L'article de blog à Blog MSDN suggère de le faire, mais il semble créer un script vide :

Update-Database -Script -SourceMigration: $InitialDatabase

0 votes

313voto

Matt Wilson Points 1273

L'API semble avoir changé (ou du moins, elle ne fonctionne pas pour moi).

L'exécution de la commande suivante dans la console du gestionnaire de paquets fonctionne comme prévu :

Update-Database -Script -SourceMigration:0

17 votes

Je sais que c'est la bonne réponse, mais comment diable avez-vous découvert que le 0 fonctionne lorsque le paramètre est normalement une chaîne de caractères !

31 votes

Juste des essais et des erreurs après avoir essayé tout ce que j'ai pu imaginer pour le faire fonctionner :)

1 votes

Cela crée-t-il une copie exacte de la base de données ? Y compris le contenu des tables ?

50voto

Justin Lessard Points 891

Pour tous ceux qui utilisent le cadre de l'entité noyau dur pour finir ici. C'est comme ça qu'il faut faire.

# Powershell / Package manager console
Script-Migration

# Cli 
dotnet ef migrations script

Vous pouvez utiliser le -From y -To pour générer un script de mise à jour pour mettre à jour une base de données à une version spécifique.

Script-Migration -From 20190101011200_Initial-Migration -To 20190101021200_Migration-2

https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/#generate-sql-scripts

Il existe plusieurs options pour cette commande.

El de doit être la dernière migration appliquée à la base de données avant l'exécution du script. Si aucune migration n'a été appliquée, spécifiez 0 (c'est la valeur par défaut).

El à La migration est la dernière migration qui sera appliquée à la base de données après l'exécution du script. Par défaut, il s'agit de la dernière migration de votre projet.

Un site idempotent script peut éventuellement être généré. Ce script applique les migrations uniquement si elles n'ont pas déjà été appliquées à la base de données. Ceci est utile si vous ne savez pas exactement quelle était la dernière migration appliquée à la base de données ou si vous déployez sur plusieurs bases de données qui peuvent chacune être à une migration différente.

1 votes

Cela fonctionne jusqu'à un certain point. Dès que vous commencez à changer les noms des colonnes, des erreurs sont générées. La création d'un DacPac est une meilleure solution. Surtout lorsque vous commencez à utiliser des pipelines en CI/CD.

0 votes

Vous pouvez omettre l'horodatage dans les noms de migration et cela fonctionnera toujours.

10voto

Tahir Khalid Points 721

Pour ajouter à la réponse de Matt Wilson, j'avais un tas de classes d'entités codées mais pas de base de données car je n'avais pas fait de sauvegarde. J'ai donc fait ce qui suit sur mon projet Entity Framework :

Ouvrez la console Package Manager dans Visual Studio et tapez ce qui suit :

Enable-Migrations

Add-Migration

Donnez à votre migration un nom tel que "Initial", puis créez la migration. Enfin, tapez ce qui suit :

Update-Database

Update-Database -Script -SourceMigration:0

La dernière commande créera vos tables de base de données à partir de vos classes d'entités (à condition que vos classes d'entités soient bien formées).

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