Entity Framework - Recommencer - Annuler / Annuler toutes les migrations


168

Pour une raison quelconque, mes migrations semblent avoir été confuses / corrompues / peu importe. J'en suis au point où je veux simplement recommencer, alors existe-t-il un moyen d'annuler complètement toutes les migrations, d'effacer l'historique et de supprimer le code de migration, donc je suis de retour à la case départ?

par exemple) PM> Disable-MigrationsouRollback-Migrations

Je ne veux pas "mettre à jour" une étape de migration d'origine (c'est-à-dire quelque chose comme une InitialSchemacible) car je ne peux plus la trouver.

Réponses:


358

Vous pouvez revenir à n'importe quelle migration en utilisant:

Update-Database -TargetMigration:"MigrationName"

Si vous souhaitez annuler toutes les migrations, vous pouvez utiliser:

Update-Database -TargetMigration:0

ou équivalent:

Update-Database -TargetMigration:$InitialDatabase 

Dans certains cas, vous pouvez également supprimer la base de données et toutes les classes de migration.


7
comme d'habitude, tu es le meilleur.
drzaus

2
Je ne comprends pas, l'OP dit spécifiquement "Je ne veux pas" mettre à jour "vers une étape de migration d'origine (c'est-à-dire quelque chose comme une cible InitialSchema) parce que je ne peux plus la trouver." Comment cette réponse fait-elle ce qu'il veut? Ce à quoi je m'attendais, c'est que je serais dans un état où je dois à enable-migrationsnouveau. Celles-ci sont évidemment utiles, mais accomplissent-elles ce que le PO demande? (S'il vous plaît ne répondez pas avec "bien, il a accepté la réponse." J'essaie de comprendre cela, pas d'être un smartass).
Michael Blackburn

@MichaelBlackburn: Si vous souhaitez exécuter à enable-migrationsnouveau et que vous développez une base de données à partir de zéro, il vous suffit de suivre la dernière phrase: supprimer la base de données et tout le code lié à la migration. Si vous avez commencé à utiliser des migrations avec une base de données existante, vous devez d'abord annuler toutes les migrations à l'aide de la deuxième ou de la troisième commande, puis supprimer la MigrationHistorytable et tout le code lié à la migration. Cela devrait vous amener à la position de départ. Vous pouvez également obtenir la base de données de démarrage à partir d'une sauvegarde (avant d'utiliser les migrations) et supprimer tout le code lié à la migration.
Ladislav Mrnka

4
@MichaelBlackburn: ce que je voulais dire, c'est que toutes les autres solutions que j'avais vues vous disaient de revenir à votre première migration nommée , mais mon problème était qu'il n'y avait pas de migration propre initiale à mettre à jour (retour) vers - je viens de voulait se débarrasser de toutes les migrations, quelle que soit la méthode. Par conséquent, cette réponse a répondu à ma préoccupation avec-TargetMigration:0
drzaus


8

Pour être clair, si vous utilisez LocalDb, lorsque vous souhaitez partir de zéro, supprimez simplement la base de données via l'explorateur de base de données, puis tapez enable-migrations -forcedans la console du gestionnaire de package. Ne supprimez pas la base de données via le dossier App_Data ou vous rencontrerez le problème suivant .


2
Soyez prudent lorsque vous faites cela car cela écrasera votre Migrations \ Configuration.cs sans avertissement!
cgatian

Merci pour l'avertissement, j'ai en quelque sorte abandonné le code en premier après un certain temps, c'est bien d'avoir tout votre code en une seule fois, en place, d'avoir le contrôle de version du contrôle de source pour votre base de données en soi, mais je n'ai vu aucun autre gros avantage et est retourné à la base de données en premier. J'utilise Red Gate Sql Compare pour suivre tous les deltas.
Brian Ogden


0

Il est mal écrit dans leur documentation je suppose, pour moi j'ai utilisé

Update-Database -Target MigrationName
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.