web-dev-qa-db-fra.com

Réinitialiser les migrations Entity-Framework

J'ai bougé mes migrations, j'ai utilisé IgnoreChanges lors de la migration initiale, mais je souhaite 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 Add-Migration, il ne génère pas un fichier complet (il est vide, car je n'ai apporté aucune modification depuis ma dernière migration, mais maintenant supprimée).

Existe-t-il une commande Disable-Migrations afin de pouvoir réexécuter Enable-Migrations?

278
Todd

Tu dois :

  1. Supprimer l'état: Supprimez le dossier de migrations de votre projet. Et
  2. Supprimez la table __MigrationHistory dans votre base de données (peut être sous les tables système); ensuite
  3. Exécutez la commande suivante dans la console du gestionnaire de packages:

    Enable-Migrations -EnableAutomaticMigrations -Force
    

    Utiliser avec ou sans -EnableAutomaticMigrations

  4. Et enfin, vous pouvez lancer:

    Add-Migration Initial
    
416
Todd

Le problème: Vous avez mal géré vos migrations et vous souhaitez le réinitialiser sans supprimer vos tables existantes.

Le problème: vous ne pouvez pas réinitialiser les migrations avec des tables existantes dans la base de données car EF souhaite créer les tables à partir de rien.

Que faire:

  1. Supprimez les migrations existantes de la table Migrations_History.

  2. Supprimez les migrations existantes du dossier Migrations.

  3. Exécutez add-migration Reset. Cela créera une migration dans votre dossier de migration incluant la création des tables (mais ne l'exécutera pas pour éviter une erreur.) 

  4. Vous devez maintenant créer la première ligne dans la table MigrationHistory afin que EF ait un instantané de l'état actuel. EF le fera si vous appliquez une migration. Cependant, vous ne pouvez pas appliquer la migration que vous venez de faire car les tables existent déjà dans votre base de données. Allez donc dans Migration et commentez tout le code dans la méthode "Up".

  5. Maintenant, lancez update-database. Il appliquera la migration (sans changer réellement la base de données) et créera une ligne d'instantané dans MigrationHistory.

Vous avez maintenant réinitialisé vos migrations et vous pouvez continuer avec des migrations normales.

137
Greg Gum

Que diriez-vous 

Update-Database –TargetMigration: $InitialDatabase

dans la console du gestionnaire de packages? Il devrait réinitialiser toutes les mises à jour à son état initial.

Lien de référence: Code First Migrations - Migration vers une version spécifique (avec mise à niveau inférieure)

26
Chris Voon

Pour résoudre ce problème, vous devez: 

  1. Supprimez tous les fichiers * .cs du dossier Migrations.

  2. Supprimer la table _MigrationHistory dans la base de données 

  3. Exécuter Enable-Migrations -EnableAutomaticMigrations -Force

  4. Exécuter Add-Migration Reset

Ensuite, dans la classe public partial class Reset : DbMigration, vous devez commenter toutes les tables existantes et actuelles:

public override void Up()
{
// CreateTable(
// "dbo.<EXISTING TABLE NAME IN DATABASE>
// ...
// }
...
}

Si vous manquez ce bit, tout va échouer et vous devez recommencer!

  1. Maintenant, lancez Update-Database -verbose

Cela devrait réussir si vous avez correctement effectué ce qui précède et que vous pouvez maintenant continuer comme d'habitude.

14
Rusty Nail

Dans EntityFramework 6, essayez:

Add-Migration Initial

afin de mettre à jour le fichier de migration initial.

2
Asaf

Mon problème s'est avéré que j'ai supprimé manuellement le dossier Migrations. Je l'ai fait parce que je voulais sauvegarder le contenu, alors j'ai simplement fait glisser le dossier hors du projet. J'ai par la suite résolu le problème en le remettant (après avoir effectué une copie de sauvegarde), en supprimant le dossier Migrations en cliquant dessus avec le bouton droit de la souris dans Solutions Explorer et en choisissant Supprimer dans le menu contextuel.

2
user1738579

Etant donné que cela apparaît encore lorsque nous recherchons EF dans .NET Core, je posterai ma réponse ici (car elle m’a beaucoup hanté). Notez qu'il existe certaines subtilités dans la version EF 6 .NET (aucune commande initiale et vous devrez supprimer les fichiers "Snapshot").

(Testé dans .NET Core 2.1)

Voici les étapes:

  1. Supprimez la table _efmigrationhistory.
  2. Recherchez votre solution complète pour les fichiers contenant Snapshot dans leur nom, tels que ApplicationDbContextSnapshot.cs et suppression les.
  3. Exécuter Add-Migration InitialMigration

Remarque: Vous devez supprimer TOUS les fichiers d’instantanés. J'ai passé d'innombrables heures à simplement supprimer la base de données ... Cela générera une migration vide si vous ne le faites pas.

De plus, en n ° 3, vous pouvez simplement 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 d'Entity Framework 7

2
Jose A

Dans Entity Framework Core.

  1. Supprimer tous les fichiers du dossier des migrations.
  2. Tapez dans la console

base de données dotnet ef drop -f -v

migrations dotnet ef add Initial

mise à jour de la base de données dotnet ef

1
Liam Kernighan

En EF6

  1. Supprimez tous vos fichiers dans le dossier 'migrations' ... Mais pas la 'création initiale' ou la 'configuration'.
  2. Supprimer la base de données.
  3. Maintenant, lancez Add-Migration Initial.
  4. Maintenant vous pouvez 'mettre à jour la base de données' et tout ira bien.
1
adudley

Cette méthode n'exige pas la suppression de la table __MigrationHistory, vous n'avez donc pas à 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 packages, exécutez Add-Migration ResetMigrations
  3. Nettoyer l'historique de migration dans la méthode Up():
/// <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()
    {
    }
}
0
Olexander