380 votes

Réinitialisation des migrations Entity-Framework

J'ai gâché mes migrations, j'ai utilisé IgnoreChanges sur la migration initiale, mais je veux maintenant supprimer toutes mes migrations et commencer par une migration initiale avec toute la logique.

Lorsque je supprime les migrations dans le dossier et que j'essaie et Add-Migration il ne génère pas un fichier complet (il est vide - parce que je n'ai fait aucune modification depuis ma dernière migration, maintenant supprimée).

Y a-t-il un Désactiver les migrations pour que je puisse réexécuter Enable-Migrations ?

1 votes

3 votes

Une note importante si vous avez plusieurs chaînes de connexion : spécifiez laquelle utiliser lorsque vous réinitialisez les migrations, sinon elle essaiera de s'appliquer aux deux, ce qui peut causer des problèmes en cas de divergences.

0 votes

Remarque : si vous n'aviez pas supprimé vos migrations (vous utilisez le contrôle de version, n'est-ce pas ?), vous auriez pu mettre à jour votre base de données vers votre première migration, puis supprimer l'atténuation et créer de nouvelles migrations à partir de ce point. Voir ici : stackoverflow.com/a/23793384/309634

10voto

Jose A Points 978

Considérant que cette question apparaît toujours lorsqu'on cherche EF dans .NET Core, je vais poster ma réponse ici (car elle m'a beaucoup hanté). Notez qu'il y a quelques subtilités avec la version EF 6 .NET (Pas de commande initiale, et vous devrez supprimer les fichiers "Snapshot").

(Testé en .NET Core 2.1)

Voici les étapes :

  1. Supprimer le _efmigrationhistory table.
  2. Recherchez dans l'ensemble de votre solution les fichiers qui contiennent Instantané dans leur nom, comme ApplicationDbContextSnapshot.cs y supprimer les.
  3. Reconstruisez votre solution
  4. Exécuter Add-Migration InitialMigration

Veuillez noter : Vous devez supprimer TOUS les fichiers Snapshot . J'ai passé d'innombrables heures à supprimer la base de données... Cela va générer une migration vide si vous ne le faites pas.

De plus, dans le numéro 3, vous pouvez nommer votre migration comme vous le souhaitez.

Voici quelques ressources supplémentaires : asp.net CORE Migrations générées vides

Réinitialiser les migrations Entity Framework 7

6voto

Siege21x Points 85

Supprimer el Migrations Dossier, Clean puis Rebuild le projet. Cela a fonctionné pour moi. Avant de nettoyer et reconstruire, il disait que la migration existait déjà puisque dans sa mémoire cache, elle n'était pas encore supprimée.

3voto

Asaf Points 41

Dans EntityFramework 6, veuillez essayer :

Add-Migration Initial

afin de mettre à jour le fichier de migration initial.

3voto

Olexander Points 1071

Cette méthode ne nécessite pas la suppression de la base de données de l'utilisateur. __MigrationHistory afin de ne pas avoir à mettre la main sur la base de données lors du déploiement.

  1. Supprimez les migrations existantes du dossier Migrations.
  2. Dans la console du gestionnaire de paquets, exécutez Add-Migration ResetMigrations
  3. Histoire de la migration propre dans le Up() méthode :

    /// <summary> /// Reset existing migrations by cleaning the MigrationHistory table /// and creating a new initial migration with the current model snapshot. /// </summary> public partial class ResetMigrations : DbMigration { public override void Up() { Sql("DELETE FROM [dbo].[MigrationHistory]"); }

    public override void Down()
    {
    }

    }

2voto

user1738579 Points 41

Mon problème s'est avéré être que j'ai supprimé manuellement le dossier Migrations. Je l'ai fait parce que je voulais sauvegarder son contenu, et j'ai donc simplement fait glisser le dossier hors du projet. J'ai ensuite résolu le problème en le remettant dans le projet (après avoir fait une copie de sauvegarde), puis en supprimant le dossier Migrations en cliquant avec le bouton droit de la souris dans l'Explorateur de solutions et en choisissant Supprimer dans le menu contextuel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X