Migrations EF: annulation de la dernière migration appliquée?
Cela ressemble à une tâche vraiment commune, mais je ne trouve pas un moyen facile de le faire.
Je veux annuler la dernière migration appliquée. Je m'attendais à une commande simple, comme
PM> Update-Database -TargetMigration:"-1"
Au lieu de cela, tout ce que je peux trouver est:
PM> Get-Migrations
Retrieving migrations that have been applied to the target database.
201208012131302_Add-SystemCategory
201207311827468_CategoryIdIsLong
201207232247409_AutomaticMigration
201207211340509_AutomaticMigration
201207200025294_InitialCreate
PM> Update-Database -TargetMigration:"CategoryIdIsLong"
(au moins je peux utiliser juste le nom, en sautant l'horodatage...)
Y a-t-il un moyen plus facile?
7 réponses
À partir de EF 5.0, l'approche que vous décrivez est la méthode préférée. Une solution serait de créer un script PS wrapper qui automatise les étapes ci-dessus. De plus, n'hésitez pas à créer une demande de fonctionnalité pour cela, ou mieux encore, tentez de la mettre en œuvre! http://entityframework.codeplex.com/
Je veux ajouter quelques éclaircissements à ce fil:
Update-Database -TargetMigration:"name_of_migration"
Ce que vous faites ci-dessus est de dire que vous voulez annuler toutes les migrations JUSQU'à ce qu'il vous reste la migration spécifiée. Ainsi, si vous utilisez GET-MIGRATIONS et que vous trouvez que vous avez A, B, C, D et E, l'utilisation de cette commande annulera E Et D pour vous rendre à C:
Update-Database -TargetMigration:"C"
Aussi, sauf si quelqu'un peut commenter le contraire, j'ai remarqué que vous pouvez utiliser une valeur ordinale et le commutateur short-Target (ainsi, - Target est la même chose que-TargetMigration). Si vous souhaitez reprendre toutes les migrations et recommencer, vous pouvez utiliser:
update-database -target:0
0, ci-dessus, annulerait même la première migration (c'est une commande destructrice-assurez-vous de savoir ce que vous faites avant de l'utiliser!) -- quelque chose que vous ne pouvez pas faire si vous utilisez la syntaxe ci-dessus qui nécessite le nom de la migration cible (le nom de la 0ème migration n'existe pas avant qu'une migration soit appliquée!). Donc, dans ce cas, vous devez utiliser le 0 (ordinale) valeur. De même, si vous avez appliqué les migrations A, B, C, D et E (dans cet ordre), alors l'ordinal 1 devrait se référer à A, l'ordinal 2 devrait se référer à B, et ainsi de suite. Donc, pour revenir à B vous pouvez utiliser soit:
Update-Database -TargetMigration:"B"
Ou
Update-Database -TargetMigration:2
Dans EntityFrameworkCore:
Update-Database 20161012160749_AddedOrderToCourse
Où 20161012160749_AddedOrderToCourse
est un nom de migration vers lequel vous souhaitez restaurer.
La solution est:
Update-Database –TargetMigration 201609261919239_yourLastMigrationSucess
Rappel supplémentaire:
Si vous avez plusieurs types de configuration, vous devez spécifier le [ConfigurationName]
Update-Database -Configurationtypename [ConfigurationName] -TargetMigration [MigrationName]
J'utilise EntityFrameworkCore et j'utilise la réponse de @MaciejLisCK. Si vous avez plusieurs contextes de base de données, vous devrez également spécifier le contexte en ajoutant le paramètre context, par exemple:
Update-Database 201207211340509_MyMigration -context myDBcontext
(où 201207211340509_MyMigration
est la migration vers laquelle vous souhaitez revenir, et myDBcontext
est le nom de votre contexte de base de données)
Dans EF Core, vous pouvez entrer la commande Remove-Migration
dans la console du gestionnaire de paquets après avoir ajouté votre migration erronée.
La console vous suggère de le faire si votre migration peut entraîner une perte de données:
Une opération échafaudée peut entraîner la perte de données. Veuillez vérifier l'exactitude de la migration. Pour annuler cette action, utilisez Supprimer-Migration.