Cela ressemble à une tâche très commune, mais je ne trouve pas de 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 seulement le nom, en sautant l'horodatage ...)
Y a-t-il un moyen plus facile?
A 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é à cet effet ou, mieux encore, à tenter de l'implémenter! http://entityframework.codeplex.com/
Je veux ajouter quelques précisions à ce sujet:
Update-Database -TargetMigration:"name_of_migration"
Ce que vous faites ci-dessus indique que vous souhaitez annuler toutes les migrations jusqu'à ce que la migration spécifiée vous reste. Ainsi, si vous utilisez GET-MIGRATIONS et constatez que vous avez A, B, C, D et E, alors cette commande annulera E et D pour vous amener à C:
Update-Database -TargetMigration:"C"
De plus, à moins que quelqu'un ne puisse dire le contraire, j'ai remarqué que vous pouvez utiliser une valeur ordinale et le commutateur short -Target (ainsi, -Target est identique à -TargetMigration). Si vous souhaitez annuler toutes les migrations et recommencer, vous pouvez utiliser:
update-database -target:0
0, ci-dessus, annulerait la première migration (, il s'agit d'une commande destructive - 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 0e migration n'existe pas avant l'application d'une migration!). Donc, dans ce cas, vous devez utiliser la valeur 0 (ordinale). De même, si vous avez appliqué les migrations A, B, C, D et E (dans cet ordre), l'ordinal 1 doit faire référence à A, l'ordinal 2 doit faire référence à B, etc. Donc, pour revenir à B, vous pouvez utiliser soit:
Update-Database -TargetMigration:"B"
ou
Update-Database -TargetMigration:2
Selon cette relation réponse sur une question similaire, le nom de paramètre correct est -Target
(pour EF Core 1.1) ou -Migration
(pour EF Core 2.0).
Dans EntityFrameworkCore:
Update-Database 20161012160749_AddedOrderToCourse
où 20161012160749_AddedOrderToCourse
est le nom de la migration à laquelle vous souhaitez revenir.
La solution est:
Update-Database –TargetMigration 201609261919239_yourLastMigrationSucess
Rappel supplémentaire:
Si vous avez plusieurs types de configuration, vous devez spécifier le [Nom de configuration]
Update-Database -Configurationtypename [ConfigurationName] -TargetMigration [MigrationName]
update-database 0
This will roll back all migrations in EFCore
Dans EF Core, vous pouvez entrer la commande Remove-Migration
dans la console du gestionnaire de packages 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 a été échafaudée, ce qui peut entraîner une perte de données. Veuillez vérifier l'exactitude de la migration. Pour annuler cette action, utilisez Remove-Migration.
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 à laquelle vous souhaitez revenir et myDBcontext
est le nom de votre contexte de base de données)