web-dev-qa-db-fra.com

Comment désappliquer une migration dans ASP.NET Core avec EF Core

Lorsque j'exécute PM> Remove-Migration -context BloggingContext dans VS2015 avec un projet ASP.NET Core utilisant EF Core, l'erreur suivante apparaît:

System.InvalidOperationException: The migration '20160703192724_MyFirstMigration' has already been applied to the database. Unapply it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration.    at Microsoft.EntityFrameworkCore.Migrations.Design.MigrationsScaffolder.RemoveMigration(String projectDir, String rootNamespace, Boolean force) 
    at Microsoft.EntityFrameworkCore.Design.MigrationsOperations.RemoveMigration(String contextType, Boolean force) 
    at Microsoft.EntityFrameworkCore.Tools.Cli.MigrationsRemoveCommand.<>c__DisplayClass0_0.<Configure>b__0() 
    at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args) 
    at Microsoft.EntityFrameworkCore.Tools.Cli.Program.Main(String[] args) 
 The migration '20160703192724_MyFirstMigration' has already been applied to the database. Unapply it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration.

Comment puis-je le désappliquer? J'utilise la dernière version d'ASP.NET Core 1.0, d'EF Core et de VS2015 Update 3.

129
nam

Utilisation:

CLI

> dotnet ef database update <previous-migration-name>

Console du gestionnaire de packages

PM> Update-Database <previous-migration-name>

Exemple:

PM> Update-Database MyInitialMigration

Ensuite, essayez de supprimer la dernière migration.

La suppression de la migration sans mise à jour de la base de données ne fonctionne pas car vous avez appliqué les modifications à la base de données.

Si vous utilisez PMC, essayez: PM> update-database 0 Ceci effacera la base de données et vous permettra de supprimer l'instantané de migration de votre solution.

147
adem caglin

Pour supprimer complètement toutes les migrations et tout recommencer, procédez comme suit:

dotnet ef database update 0
dotnet ef migrations remove
98
Ronald Ramos

Vous pouvez toujours utiliser la commande Update-Database.

Update-Database -Migration <migration name> -Context <context name>

Cependant, à en juger par le nom de votre migration, je suppose que c'est la première migration, de sorte que cette commande peut ne pas fonctionner. Vous devriez pouvoir supprimer l'entrée de la table __MigrationHistory de votre base de données, puis exécuter à nouveau la commande Remove-Migration. Vous pouvez également supprimer le fichier de migration et tout recommencer.

48
Brad

Pour rétablir la dernière migration appliquée, vous devez (commandes de la console du gestionnaire de packages):

  1. Rétablir la migration de la base de données: PM> Update-Database <prior-migration-name>
  2. Supprimer le fichier de migration du projet (ou il sera réappliqué à la prochaine étape)
  3. Mise à jour de l'instantané du modèle: PM> Remove-Migration

UPD: La deuxième étape ne semble pas être nécessaire dans les dernières versions de Visual Studio (2017).

24

Vous pouvez simplement cibler une migration par valeur

 Update-Database -Migration:0

Alors vas-y et enlève-le

 Remove-Migration
21
John Nyingi

Pour désappliquer une migration spécifique:

dotnet ef database update <previous-migration-name>
or
PM> Update-Database -Migration <previous-migration-name>

Pour supprimer toutes les migrations:

dotnet ef database update 0
or
PM> Update-Database -Migration 0

Pour supprimer la dernière migration:

dotnet ef migrations remove
or
PM> Remove-Migration

Pour désappliquer et supprimer la dernière migration:

dotnet ef migrations remove --force
or
PM> Remove-Migration -Force
14
AlbertK

Pour "désappliquer" la migration la plus récente (après?) Après qu'elle a déjà été appliquée à la base de données:

  1. Ouvrez l'explorateur d'objets SQL Server (Affichage -> "Explorateur d'objets SQL Server")
  2. Accédez à la base de données liée à votre projet en développant les petits triangles sur le côté.
  3. Développer "Tables"
  4. Recherchez la table nommée "dbo._EFMigrationsHistory".
  5. Faites un clic droit dessus et sélectionnez "Afficher les données" pour afficher les entrées de la table dans Visual Studio.
  6. Supprimez la ligne correspondant à votre migration que vous souhaitez désappliquer (Dites "oui" à l'avertissement, si vous y êtes invité).
  7. Exécutez "dotnet ef migrations remove" à nouveau dans la fenêtre de commande dans le répertoire contenant le fichier project.json. Vous pouvez également exécuter la commande "Remove-Migration" dans la console du gestionnaire de packages.

J'espère que cela vous aidera et s'appliquera à toute migration dans le projet ... Je ne l'ai testée que pour la migration la plus récente ...

Bon codage!

14
Raj

Dans la console du gestionnaire de packages:

Update-Database Your_Migration_You_Want_To_Revert_To

Plus d'options et d'explications sur la façon de revenir en arrière peuvent être vues ici

8
Drewskis

En général, si vous utilisez la console Package Manager, le bon moyen de supprimer une migration spécifique consiste à référencer le nom de la migration.

Update-Database -Migration {Name of Migration} -Context {context}

Une autre façon de supprimer la dernière migration que vous avez appliquée conformément à docs consiste à utiliser la commande:

dotnet ef migrations remove

Cette commande doit être exécutée à partir de la commande de développeur Prompt ( comment ouvrir l'invite de commande ) dans le répertoire de votre solution.

Par exemple, si votre application se trouve à l'intérieur du nom "Application" et se trouve dans le dossier c:\Projects. Ensuite, votre chemin devrait être:

C:\Projects\Application
7

Vous devez supprimer la table 'Enregistrement de' _EFMigrationsHistory 'de la migration' 20160703192724_MyFirstMigration '.

Sinon, cette commande supprimera le dossier de migration et de suppression:

   > remove-migration -force
6
AminGolmahalle

Pour désappliquer une migration dans EF Core 1.0, utilisez la commande suivante:

mise à jour de la base de données dotnet ef {nom_migration}

Utilisez le nom de la migration de la migration jusqu'à laquelle vous souhaitez conserver vos modifications. La liste des noms de migration peut être trouvée en utilisant:

liste des migrations dotnet ef

2
Rufus Lobo
var context = serviceProvider.GetRequiredService<ApplicationDbContext>();
var userManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var roleManaget = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();

await context.Database.EnsureDeletedAsync();
0
Kishor Gujar