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?

346
demandé sur Cristi Diaconescu 2012-08-10 19:14:13

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/

122
répondu Andrew Peters 2012-08-13 18:38:14

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
307
répondu Jazimov 2017-05-11 01:42:08

Dans EntityFrameworkCore:

Update-Database 20161012160749_AddedOrderToCourse

20161012160749_AddedOrderToCourse est un nom de migration vers lequel vous souhaitez restaurer.

45
répondu MaciejLisCK 2016-10-13 12:25:00

La solution est:

Update-Database –TargetMigration 201609261919239_yourLastMigrationSucess
8
répondu Max 2016-09-28 03:13:15

Rappel supplémentaire:

Si vous avez plusieurs types de configuration, vous devez spécifier le [ConfigurationName]

Update-Database -Configurationtypename [ConfigurationName] -TargetMigration [MigrationName]
2
répondu Amos 2018-05-18 02:04:20

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)

0
répondu Chris Halcrow 2018-07-30 06:14:35

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.

-1
répondu Sean Saúl Astrakhan 2018-08-06 16:14:43