web-dev-qa-db-fra.com

Impossible de générer une migration explicite dans le cadre d'une entité

J'ajoute une nouvelle migration mais ce message indique:

Impossible de générer une migration explicite car les suivants des migrations explicites sont en attente: [201203170856167_left]. Appliquer le en attente de migrations explicites avant de tenter de générer un nouveau .__ migration explicite.

Quelqu'un peut-il m'aider?

77
Noman Saeed

Il vous indique que votre application contient une migration non traitée et que vous devez exécuter Update-Database avant de pouvoir ajouter une autre migration. 

70
Ladislav Mrnka

J'ai eu le même problème. Apparemment, les structures d'entités génèrent cette erreur lorsqu'il est impossible de se connecter à la base de données. Assurez-vous donc que vous pouvez y accéder avant de chercher d'autres problèmes.

38
Robin Dorbell

Vous devez soit exécuter "update-database" à partir de la console du gestionnaire de paquets pour envoyer vos modifications à la base de données OR, vous pouvez supprimer le fichier de migration en attente ([201203170856167_left]) de votre dossier Migrations, puis réexécuter "add -migration "pour créer une toute nouvelle migration basée sur vos modifications.

29
socketman

Cette erreur peut également signifier que les migrations ne sont plus reconnues. Cela m'est arrivé après avoir modifié la valeur de ContextKey dans Migrations.Configuration . La solution consistait simplement à mettre à jour ContextKey dans la table de base de données "__MigrationHistory" (ou à rétablir la valeur dans la classe Configuration, je suppose). La ContextKey et l'espace de noms de votre application doivent correspondre.

23
Thomas

1. Chaîne de connexion/autorisations de connexion

Vérifiez à nouveau la chaîne de connexion. 

Assurez-vous que l'utilisateur avec lequel vous vous connectez avec encore est autorisé à lire à partir de [__MigrationHistory] et à modifier le schéma.

Vous pouvez également essayer de modifier la chaîne de connexion dans le fichier de configuration d'application ou Web afin d'utiliser Sécurité intégrée (Windows Auth) pour exécuter la commande add-migration en tant que 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 le fichier App.config du projet où se trouve le DbContext.

2. Projet de démarrage

Vous pouvez spécifier le projet de démarrage sur la ligne de commande ou cliquer avec le bouton droit de la souris sur le projet avec les dossiers DbContext, Configuration et Migrations et sélectionner Définir comme projet de démarrage. Je suis sérieux, cela peut réellement aider.

 enter image description here

13
Jess

Avait le même problème et a pu résoudre avec quelques conseils de réponses ci-dessus:

  • Dans la console du gestionnaire de paquets, vérifiez le projet par défaut (pointez sur le projet avec la configuration de migration
  • Assurez-vous que la startup-proj a un web.config avec une chaîne de connexion valide ( Ou
  • Assurez-vous que le projet avec les migrations a un app.config/web.config avec une chaîne de connexion valide
  • Vérifier les autorisations dans la base de données (pour l'utilisateur configuré dans votre chaîne de connexion)

Utilisez "update-database -verbose" dans la console du gestionnaire de packages pour obtenir des informations plus spécifiques auxquelles les migrations tentent de se connecter. (M'a aidé dans mon cas à découvrir que mon projet de démarrage n'était pas configuré correctement ...)

8
flex

Lorsque vous rencontrez ce problème, essayez 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 peut 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

your.namespace.ContextClassName est le nom de votre classe de configuration dans votre dossier de migration, préfixé par l'espace de noms complet.

DeltaProject est le nom de votre projet principal avec votre fichier web.config ou app.config.

DeltaSQL est le nom de votre chaîne de connexion définie dans votre fichier web.config ou app.config.

6
Yves Rochon

Si vous n'avez pas utilisé Update-Database, vous pouvez simplement le supprimer. Si vous avez exécuté la mise à jour, annulez-la 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 à partir d'ici: Comment annuler la dernière commande Add-Migration?

6
nu everest

Cette erreur signifie que des migrations en attente doivent être validées avant de pouvoir exécuter une autre migration explicite. Vous pouvez choisir de 

  1. Exécutez ces migrations en attente à l'aide de la commande Update-Database
  2. Supprimez ces migrations en attente. Le moyen le plus sûr est d'ouvrir le dossier Migrations, cliquez-droit sur [201203170856167_left]> Exclure du projet.

Après celui-ci, vous pouvez lancer à nouveau "Add-Migration ..."

J'espère que ça aide

5
Hung Vu

Juste mes deux cents:

Mon scénario:

  1. J'ai restauré ma base de données locale à un état de fonctionnement.
  2. Déjà les migrations avaient déjà été appliquées.
  3. Chaque fois que j'ai essayé d'ajouter une nouvelle migration, j'ai eu l'erreur concernant les migrations en attente, comme mentionné dans le PO.

Solution:

Pour résoudre ce problème, je viens de fournir 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 dossier app.config pour vous permettre d'appliquer ce comportement par défaut afin que vous n'ayez pas à fournir des paramètres explicites à chaque fois. Cependant, je ne suis pas sûr de savoir comment faire cela.

3
IbrarMumtaz

Il y a une ambiguïté et donc une erreur. La meilleure méthode consiste à exclure le fichier de migration actuel et à créer un nouveau fichier de migration ( add-migration ), puis à copier le contenu de la nouvelle migration dans le fichier exclu, à l'inclure à nouveau et à exécuter update-database command.

2
Sachin Cholkar

Ma base de données locale n'avait ni __MigrationHistory, ni existant. J'ai créé manuellement la table, puis j'ai migré les données de cette table de PROD vers ma base de données locale. Cela a amené VS à penser que les migrations avaient été appliquées (ce qu’elles avaient été).

1
contactmatt

j'ai résolu le même problème comme ceci:

  • supprimer l'ancien fichier de migration
  • update-database -force
  • Add-Migration AddedEntity
  • mise à jour-base de données
1
yilmazdincsoy

J'ai eu les mêmes problèmes et je n'ai pu que le résoudre en exécutant Add-Migration 'MigrationName' -Force 

Avec -Force étant la partie importante.

1
Evan Barke

J'ai fait d'une autre manière ..___. J'ai complètement supprimé la base de données et lance à nouveau "update-database".

0
Ghadir Farzaneh

J'ai aussi rencontré ce problème. C'est arrivé lorsque j'ai créé une nouvelle base de données et que des modifications étaient en attente pour la migration de la base de données code-first, puis j'ai essayé d'exécuter la commande "Update-Database". Solution: exécutez la commande "Add-Migration -MigrationName" pour créer une nouvelle migration pour une nouvelle base de données. Puis exécutez la commande "Update-Database". 

0
Pritam

Dans mon cas (avec MS Visual Studio), c'était aussi simple que de redémarrer Visual Studio.

0
AGuyCalledGerald

C’est ce qui s’est passé lorsque j’ai soudainement renommé la classe de l’ancienne migration qui existe déjà dans DB. J'ai vérifié l'historique de VCS, déterminé cela et renommé. Tout a fonctionné après.

0
Doctor Coder

Pour moi, j'ai supprimé le fichier de migration (dans votre cas, "201203170856167_left") du dossier Migrations, puis j'ai exécuté la commande ci-dessous dans la console Gestionnaire de packages.

Add-Migration <Parameter>
Update-Database
0
Surendra Mourya

Conseil: Si vous n’êtes pas sûr, il est toujours bon d’utiliser le commutateur -Script pour les commandes de migration. Cela aide aussi vraiment à comprendre ce que fait réellement Update-Database.

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 je le réexécute sans la balise -Script).

Pour Update-Database je lancerais ce qui suit:

Update-Database -Script -ConfigurationTypeName Configuration_ASPNETIdentity -ConnectionStringName SQL_AzureLive

SQL_AzureLive est la chaîne de connexion nommée dans ma configuration.

Ensuite, je peux vérifier que le code SQL est correct, l’appliquer et être terminé. Comme beaucoup d'autres l'ont dit, si la chaîne de connexion est incorrecte ou invalide, vous obtiendrez cette erreur.

0
Simon_Weaver

J'ai eu ce problème aussi pour une base de données que je savais être à jour lors de l'exécution de Add-Migration. Résolu en exécutant simplement la commande Add-Migration une seconde fois. Suspectez un problème de connectivité, comme suggéré par Robin Dorbell ci-dessus.

0
spadelives

Scénario

  • Je travaille dans une branche dans laquelle j'ai créé une nouvelle migration de base de données.
  • Je suis prêt à mettre à jour à partir de maître, mais maître a également une migration de base de données récente. 
  • Je supprime la migration de la base de données de ma branche pour éviter les conflits.
  • Je "met à jour de maître".

Problème

Après la mise à jour à partir du maître, j'exécute "Add-Migration mon_migration_nom", mais le message d'erreur suivant s'affiche:

Impossible de générer une migration explicite car les suivants les migrations explicites sont en attente: [201607181944091_AddExternalEmailActivity]. Appliquez le fichier explicite en attente migrations avant de tenter de générer une nouvelle migration explicite.

Donc, je lance "Update-Database" et reçois le message d'erreur suivant:

Impossible de mettre à jour la base de données pour correspondre au modèle actuel car il y a modifications en attente et migration automatique désactivée

Solution

À ce stade, la réexécution de "Add-Migration my_migration_name" a résolu mon problème. Ma théorie est que l'exécution de "Update-Database" a tout dans l'état où elle devait l'être pour que "Add-Migration" fonctionne.

0
Tod Birdsall

J'ai eu un problème plus simple. VS a signalé par erreur cette erreur lorsque j'avais une connexion VPN à un site client connecté à mon poste de travail. Le problème était que la sécurité du SGBD était configurée pour accepter les demandes uniquement de mon adresse IP locale réelle. Le simple fait de désactiver le VPN a résolu le problème.

0
spadelives