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
?
Tu dois :
__MigrationHistory
dans votre base de données (peut être sous les tables système); ensuiteExécutez la commande suivante dans la console du gestionnaire de packages:
Enable-Migrations -EnableAutomaticMigrations -Force
Utiliser avec ou sans -EnableAutomaticMigrations
Et enfin, vous pouvez lancer:
Add-Migration Initial
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:
Supprimez les migrations existantes de la table Migrations_History.
Supprimez les migrations existantes du dossier Migrations.
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.)
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".
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.
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)
Pour résoudre ce problème, vous devez:
Supprimez tous les fichiers * .cs du dossier Migrations.
Supprimer la table _MigrationHistory dans la base de données
Exécuter Enable-Migrations -EnableAutomaticMigrations -Force
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!
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.
Dans EntityFramework 6, essayez:
Add-Migration Initial
afin de mettre à jour le fichier de migration initial.
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.
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:
_efmigrationhistory
.ApplicationDbContextSnapshot.cs
et suppression les.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
Dans Entity Framework Core.
base de données dotnet ef drop -f -v
migrations dotnet ef add Initial
mise à jour de la base de données dotnet ef
En EF6
Add-Migration Initial
.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.
Add-Migration ResetMigrations
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()
{
}
}