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

145

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

Le billet de blog sur MSDN Blog suggère de le faire, mais il semble créer un script vide:

Update-Database -Script -SourceMigration: $InitialDatabase
Matt Wilson
la source

Réponses:

287

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

L'exécution de ce qui suit dans la console du gestionnaire de package fonctionne comme prévu:

Update-Database -Script -SourceMigration:0
Matt Wilson
la source
14
Je me rends compte que c'est la bonne réponse, mais comment diable avez-vous découvert que 0 fonctionne alors que le paramètre est normalement une chaîne?!
Dave R
27
Juste des essais et des erreurs vraiment après avoir essayé tout ce à quoi je pouvais penser pour le faire fonctionner :)
Matt Wilson
1
Cela crée-t-il une copie exacte de la base de données? Y compris le contenu de la table?
Multitut
2
@Multitut: non ça ne fera que la structure.
Martin Clarke
6
Juste au cas où quelqu'un cherche comment faire en EfCore et a fini ici comme moi, la commande est: dotnet ef migrations script. Plus d'informations sur la documentation: docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/…
Rafael Miceli
14

Pour toute personne utilisant le noyau du framework d'entité se terminant ici. Voici comment vous procédez.

# Powershell / Package manager console
Script-Migration

# Cli 
dotnet ef migrations script

Vous pouvez utiliser le paramètre -Fromet -Topour générer un script de mise à jour afin de mettre à jour une base de données vers 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.

La migration from doit être la dernière migration appliquée à la base de données avant d'exécuter le script. Si aucune migration n'a été appliquée, spécifiez 0(il s'agit de la valeur par défaut).

Le à la migration est la dernière migration qui sera appliquée à la base de données après l' exécution du script. Il s'agit par défaut de la dernière migration de votre projet.

Un script idempotent peut éventuellement être généré. Ce script applique uniquement les migrations 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.

Justin Lessard
la source
Cela fonctionne jusqu'à un certain point. Une fois que vous commencez à changer les noms de colonne, il commencera à générer des erreurs, créer un DacPac est une meilleure solution. Surtout lorsque vous commencez à utiliser Pipelines dans CI / CD
Nick Turner
8

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

Ouvrez la console du gestionnaire de package 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 commande finale 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).

Tahir Khalid
la source