Impossibilité de générer une migration explicite dans le cadre de l'entité
j'ajoute une nouvelle migration mais ce message montre:
incapable de générer une migration explicite parce que: des migrations explicites sont en attente: [201203170856167_left]. Appliquer le en attendant des migrations explicites avant de tenter de générer un nouveau explicite de la migration.
est-ce que quelqu'un peut m'aider?
20 réponses
il vous indique qu'il y a une migration non traitée dans votre application et qu'il faut exécuter Update-Database
avant de pouvoir ajouter une autre migration.
j'ai eu le même problème. Apparemment, entity framework génère cette erreur quand il est incapable de se connecter à la base de données. Donc, assurez-vous que vous êtes en mesure d'accéder à avant de chercher d'autres problèmes.
soit vous avez besoin d'exécuter" update-database "depuis la console du gestionnaire de paquets pour pousser vos modifications à la base de données, soit vous pouvez supprimer le fichier de migration en attente ([201203170856167_left]) de votre dossier Migrations et ensuite relancer" add-migration " pour créer une toute nouvelle migration basée sur vos modifications.
cette erreur peut aussi signifier que les migrations ne sont plus reconnues. Cela m'est arrivé après avoir changé la valeur de ContextKey dans Migrations.Configuration. La solution était simplement de mettre à jour la clé de contexte dans la table de base de données "__MigrationHistory" (ou de revenir sur la valeur dans la classe de Configuration je suppose). La clé de contexte et L'espace de noms de votre application doivent correspondre.
avait le même problème et a été capable de résoudre avec quelques conseils des réponses ci-dessus:
- dans la console du gestionnaire de paquets vérifiez le projet par défaut (pointez vers le projet avec la configuration de migration
- S'assurer que le startup-proj a un web.config avec une connexion valide ( ou
- S'assurer que le projet avec migrations a une application.config / web.config avec une connexion valide
- contrôle permissions en DB (pour l'utilisateur configuré dans votre connexion)
utilisez" update-database-verbose " dans la console du gestionnaire de paquets pour obtenir des informations plus spécifiques où migrations essaie de se connecter. (Aidé dans mon cas pour découvrir mon projet de démarrage n'a pas été mis correctement...)
1. Chaîne De Connexion / Permissions De Connexion
vérifiez à nouveau la chaîne de connexion.
assurez-vous que l'utilisateur que vous connectez avec still a la permission de lire à partir de [__MigrationHistory]
et a la permission de modifier le schéma.
vous pouvez également essayer de changer la chaîne de connexion dans L'application ou le fichier de configuration Web pour utiliser sécurité intégrée (Windows Auth) pour exécuter la commande add-migration comme vous-même .
par exemple:
connectionString="data source=server;initial catalog=db;persist security info=True;Integrated Security=SSPI;"
cette chaîne de connexion irait dans l'application.fichier de configuration du projet où se trouve le DbContext.
2. Projet De Création 151950920"
vous pouvez spécifier le projet de démarrage sur la ligne de commande ou vous pouvez faire un clic droit sur le projet avec le dossier DbContext
, Configuration
et Migrations et sélectionnez défini comme projet de démarrage . Je suis sérieux, cela peut réellement aider.
si vous n'avez pas utilisé Update-Database
, vous pouvez le supprimer. Si vous avez exécuté la mise à jour , faites-la revenir en arrière en utilisant Update-Database -TargetMigration "NameOfPreviousMigration"
, puis supprimez-la.
référence: http://elegantcode.com/2012/04/12/entity-framework-migrations-tips /
j'ai copié ce texte directement d'ici: Comment puis-je défaire la dernière commande Add-Migration?
dans ce numéro, veuillez essayer d'ajouter des paramètres à votre cmdlet add-migration. Par exemple, spécifier le projet de démarrage ainsi que le nom de la chaîne de connexion pourrait aider EF à trouver votre base de données cible.
add-migration Delta_Defect_0973 -ConfigurationTypeName your.namespace.ContextClassName -StartUpProject DeltaProject -ConnectionStringName DeltaSQL
où:
Delta_Defect_0973 est le nom de votre migration
votre.espace de noms.ContextClassName est le nom de votre Configuration classe dans votre dossier de migration, préfixée avec l'espace de nom complet.
DeltaProject est le nom de votre projet principal avec votre web.config ou app.fichier de configuration.
DeltaSQL est le nom de votre chaîne de connexion définie dans votre web.config ou app.fichier de configuration.
cette erreur signifie qu'il y a des migrations pendantes qui doivent être commutées avant que vous puissiez exécuter une autre migration explicite. Vous pouvez choisir de
- exécuter les migrations en cours en utilisant la commande Update-Database
- supprimer les migrations en cours. La manière la plus sûre est d'ouvrir le dossier Migrations, clic droit sur [201203170856167_left] > exclure du projet
après celle-ci, vous pouvez commencer " Add-Migration ..." à nouveau
j'Espère que ça aide
Juste mes deux cents:
mon scénario:
- j'ai restauré ma base de données locale.
- avait déjà des migrations déjà appliquées.
- chaque fois que j'ai essayé d'ajouter une nouvelle migration j'ai eu l'erreur au sujet des migrations en attente comme mentionné mon OP.
Solution:
pour contourner cela je juste fourni des paramètres plus explicites:
Add-Migration -ConnectionString "Server=localhost\SQLEXPRESS;Database=YourDataBase;Trusted_Connection=True;" -ConnectionProviderName "System.Data.SqlClient" -verbose
je suis porté à croire que vous pouvez définir un paramètre dans votre application.config folder pour vous permettre d'utiliser ce comportement par défaut de sorte que vous n'ayez pas à fournir des paramètres explicites à chaque fois. Cependant, je ne suis pas sûr de savoir comment faire.
Il y a une ambiguïté et donc l'erreur. La meilleure façon est d'exclure le fichier de migration actuel et de créer une nouvelle migration( add-migration ) fichier, puis copier le contenu de la nouvelle migration vers le fichier exclu et l'inclure à nouveau et exécuter update-database commande.
j'ai eu les mêmes problèmes et n'ai pu le résoudre qu'en lançant Add-Migration 'MigrationName' - Force
Avec Force la partie importante.
ma base de données locale n'avait pas le __MigrationHistory
peuplé, ou existant. J'ai créé manuellement la table, puis j'ai migré les données de cette table de PROD à ma base de données locale. Cela a amené VS à penser que les migrations avaient été appliquées (ce qu'elles avaient été).
scénario
- je travaille dans une branche dans laquelle j'ai créé une nouvelle migration DB.
- je suis prêt à mettre à jour à partir de master, mais master a une migration DB récente, aussi.
- j'efface la migration db de ma branche pour éviter les conflits.
- je "mise à jour du maître".
problème
après mise à jour depuis master, j'exécute "Add-Migration my_migration_name", mais j'obtiens l'erreur suivante:
incapable de générer une migration explicite parce que: les migrations explicites sont en attente: [201607181944091_AddExternalEmailactivity]. Appliquer les dispositions explicites migrations avant de tenter de générer une nouvelle migration explicite.
donc, je lance "Update-Database" et j'obtiens l'erreur suivante:
impossible de mettre à jour la base de données pour correspondre au modèle actuel parce qu'il y a en attente de modifications et la migration automatique est désactivée
Solution
à ce point, relancer" Add-Migration my_migration_name " a résolu mon problème. Ma théorie est que l'exécution de " Update-Database "a obtenu tout ce dont il avait besoin pour que" Add-Migration " fonctionne.
je suis également tombé sur cette question. Il est venu quand j'ai créé de nouveaux DB et j'ai eu des changements en attente pour mon code-D'abord la migration de DB puis j'ai essayé d'exécuter la commande "Update-Database". Solution: lancez la commande "Add-Migration-MigrationName" pour créer une nouvelle migration pour la nouvelle base de données. Puis lancez la commande "Update-Database".
j'ai eu ce problème aussi pour une base de données que je savais être à jour lorsque j'ai lancé Add-Migration. Résolu en lançant simplement la commande Add-Migration une seconde fois. Soupçonnez un problème de connectivité, comme suggéré par Robin Dorbell ci-dessus.
c'est arrivé quand j'ai soudainement renommé la classe de migration ancienne qui existe déjà en db. J'ai vérifié L'historique du VCS, j'ai déterminé ça et je l'ai renommé. Tous travaillé par la suite.
j'ai subi exactement le même problème juste après être revenu d'une migration à une autre.
Dans mon cas, j'ai "targetedmigration" à partir de "migration06" à "migration04".
j'avais besoin de supprimer la"migration0 "6 et puis j'ai pu forcer la création de la"migration05". Cela signifie essentiellement que vous devez simplement garder la prochaine migration après celle ciblée.
Conseil: il est toujours bon d'utiliser le commutateur -Script
pour les commandes de migration si vous n'êtes pas sûr. Il aide aussi vraiment à comprendre ce que Update-Database
fait réellement.
j'exécute ce qui suit pour mettre à jour la base de données, puis je reçois un script que je peux appliquer manuellement (ou tout simplement l'exécuter à nouveau sans la balise-Script).
Pour Update-Database
je ne l'exécutez la commande suivante :
Update-Database -Script -ConfigurationTypeName Configuration_ASPNETIdentity -ConnectionStringName SQL_AzureLive
où SQL_AzureLive
est la chaîne de connexion nommée dans ma configuration.
alors je peux vérifier que le SQL semble droit, l'appliquer et être fait. Comme beaucoup d'autres l'ont dit, si la chaîne de connexion est incorrecte ou invalide, vous obtiendrez cette erreur.
j'ai fait un autre chemin. J'ai complètement abandonné la base de données et lancé "update-database" à nouveau dans vs.