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.

drzaus
la source

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.

Ladislav Mrnka
la source
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
17

Pour Entity Framework Core:

Update-Database -Migration:0
Remove-Migration
Andrei Karcheuski
la source
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 .

Brian Ogden
la source
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
Dit Muhammad Idrees
la source