Réinitialiser Les Migrations Entity-Framework
j'ai brouillé mes migrations, j'ai utilisé IgnoreChanges
sur la migration initiale, mais maintenant je veux supprimer toutes mes migrations et commencer par une migration initiale avec toute la logique.
quand je supprime les migrations dans le dossier et que j'essaie Add-Migration
, cela ne génère pas de fichier complet (c'est vide - parce que je n'ai pas fait de changements depuis ma dernière migration, mais maintenant supprimé, migration).
Est-il un Désactiver les Migrations commande, donc je peux relire Enable-Migrations
?
10 réponses
Vous avez besoin de :
- Supprimer l'état: supprimer le dossier migrations dans votre projet; et
- supprimer la table
__MigrationHistory
dans votre base de données (peut être sous tables système); puis -
exécuter la commande suivante dans la Console du Gestionnaire de paquets:
Enable-Migrations -EnableAutomaticMigrations -Force
à utiliser avec ou sans
-EnableAutomaticMigrations
-
Et enfin, vous pouvez exécuter:
Add-Migration Initial
Le Problème: Vous avez jeté votre migrations et vous souhaitez le réinitialiser sans supprimer vos tables existantes.
le problème: vous ne pouvez pas réinitialiser les migrations avec les tables existantes dans la base de données car EF veut créer les tables à partir de zéro.
Que faire?
-
supprimer les migrations existantes du tableau Migrations_histoire.
-
Supprimer migrations existantes à partir du dossier Migrations.
-
Exécuter en complément de la migration de Réinitialisation. Cela créera une migration dans votre dossier de Migration qui inclut la création des tables (mais il ne l'exécutera pas de sorte qu'il ne fera pas d'erreur.)
-
vous devez maintenant créer la ligne initiale dans la table MigrationHistory afin que EF ait un instantané de l'état actuel. EF le fera si vous effectuez une migration. Cependant, vous ne pouvez pas appliquez la migration que vous venez de faire car les tables existent déjà dans votre base de données. Alors allez dans la Migration et commentez tout le code à l'intérieur de la méthode" Up".
-
Lancez maintenant update-database. Il appliquera la Migration (tout en ne changeant pas réellement la base de données) et créera une ligne de snapshot dans MigrationHistory.
vous avez maintenant réinitialisé vos migrations et pouvez continuer avec des migrations normales.
Que Diriez-vous de
Update-Database –TargetMigration: $InitialDatabase
dans la Console du Gestionnaire de paquets? Il devrait réinitialiser toutes les mises à jour à leur état initial.
lien de Référence: le Premier Code Migrations la Migration vers une Version Spécifique (y Compris le Déclassement)
pour corriger cela, vous devez:
-
supprimer tous *.fichiers cs dans le dossier Migrations.
-
supprimer le _migrationhistory Table 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 commentaire de tous les existants et les Tables:
public override void Up()
{
// CreateTable(
// "dbo.<EXISTING TABLE NAME IN DATABASE>
// ...
// }
...
}
Si vous manquez de ce peu tous échouera et vous devez recommencer!
- Maintenant Exécuter
Update-Database -verbose
cela devrait être réussi si vous avez fait ce qui précède correctement, et maintenant vous pouvez continuer comme d'habitude.
mon problème s'est avéré être que j'ai enlevé manuellement le dossier Migrations. J'ai fait ça parce que je voulais sauvegarder le contenu, donc j'ai simplement sorti le dossier du projet. J'ai ensuite corrigé le problème en le replaçant (après avoir fait une copie de sauvegarde), puis en retirant le dossier Migrations en cliquant avec le bouton droit de la souris dans Solutions Explorer et en choisissant Delete dans le menu contextuel.
dans Entitefram Framework 6 Veuillez essayer:
Add-Migration Initial
afin de mettre à jour le fichier de migration initial.
dans EF6
- supprimez tous vos fichiers dans le dossier "migrations"... Mais pas la "création initiale" ou la "configuration".
- supprimer la base de données.
- maintenant, Lancez
Add-Migration Initial
. - Maintenant vous pouvez 'update-database' et tout ira bien.
Dans Le Cadre De L'Entité De Base.
- supprimer tous les fichiers du dossier migrations.
- Type de console
dotnet ef base de données drop -f -v
dotnet ef migrations ajouter Initiale
dotnet ef base de données mise à jour
considérant que ceci apparaît toujours lorsque nous cherchons EF dans .NET Core, je vais poster ma réponse ici (car il 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é dans le cœur net 2.1)
Voici les étapes:
- supprimer le tableau
_efmigrationhistory
. - recherchez la totalité de votre solution pour les fichiers qui contiennent Snapshot dans leur nom, tels que
ApplicationDbContextSnapshot.cs
, et supprimer eux. - Exécuter
Add-Migration InitialMigration
s'il vous Plaît note: vous devez supprimer tous les fichiers D'instantané . J'ai passé des heures innombrables à supprimer la base de données... Cela générera une migration vide si vous ne le faites pas.
aussi, dans #3 vous pouvez juste nommer votre migration comme vous voulez.
Voici quelques ressources supplémentaires: asp.net migration du cœur générée vide