171 votes

La connexion nommée spécifiée est soit introuvable dans la configuration, soit non destinée à être utilisée avec le fournisseur EntityClient, soit non valide.

J'ai un objet de type "one entity framework" et lorsque je l'ajoute à mon projet, la fonction connectionstring est ajouté à app.config dans le connectionstring mais lorsque je veux créer une nouvelle entitycontext et utiliser ce connectionstring cette erreur apparaît

4 votes

Merci pour le lien, Craig. Je vote pour le maintien de ce fil de discussion, car c'est le titre qui m'a aidé à trouver l'erreur MetadataException.

0 votes

Cela m'est arrivé lorsque le fichier de configuration n'a pas été mis à jour avec une chaîne de connexion pour une raison étrange.

218voto

Morteza Manavi Points 20486

Je soupçonne que votre problème provient du fait que vous avez plus d'un projet dans votre solution et que celui qui contient votre cadre d'entité, y compris les éléments suivants edmx Les fichiers ne sont PAS le projet de démarrage des solutions. Dans ce cas, même si la chaîne de connexion existe dans le fichier EF app.config mais le CLR ne peut toujours pas le trouver au moment de l'exécution. Par exemple, si vous avez un site web et un projet EF dans votre solution, vous devez copier la chaîne de connexion du projet EF dans le fichier app.config à la page d'accueil de votre site web web.config . En principe, toutes les données de la chaîne de connexion doivent exister dans le fichier de configuration du projet à partir duquel les threads .Net sont lancés par le CLR (c'est-à-dire votre projet de démarrage). Si ce n'est pas le cas, il suffit d'ouvrir votre projet de démarrage. edmx cliquez avec le bouton droit de la souris sur sa surface, sélectionnez Propriétés et copiez la chaîne de connexion pour la coller dans votre fichier de connexion. app.config section Chaîne de connexion. De cette façon, vous pouvez vous assurer que vous avez la bonne chaîne de connexion dans votre configuration.

EDITAR:
Comme vous pouvez le voir ici sur Documenation sur le constructeur ObjectContext le premier paramètre est le nom de la chaîne de connexion qui est un code généré au moment où vous créez votre GED. Si, d'une manière ou d'une autre, le nom de votre chaîne de connexion est modifié, il vous suffit de faire un clic droit sur votre modèle et de sélectionner "Mettre à jour le modèle à partir de la base de données..." puis suivez l'assistant pour mettre à jour votre confing et votre designer afin de refléter ce changement.

1 votes

Bonjour Morteza et merci pour votre réponse, mais j'ai précédemment copié la section connectiontring dans web.config, mais l'erreur n'est pas résolue, mais quand dans entitymodel.designer remplacer (public EntityContext() : base("name=EntityContext", EntityContext")) avec la connectiontring cela a fonctionné, toute idée

1 votes

@Morteza, avez-vous une solution pour les projets dans lesquels l'assembly exécutant n'a pas d'app.config ? Dans mon cas, l'exécutable appelant est une application VB6 qui appelle mon assembly (où se trouvent les objets d'entité) via COM Interop.

4 votes

Si simple, et pourtant si frustrant. Votons. Longue vie à stackoverflow !

32voto

Musikero31 Points 991

Vous devez copier la chaîne de connexion de l'app.config dans votre web.config, ou copier le fichier entier dans le projet qui affiche la sortie. C'est l'une des conditions pour consommer le framework.

1 votes

Il suffit d'ajouter la même chaîne de connexion (comme dans le projet d'accès aux données) dans votre web.config (qui se trouve dans le projet frontal).

0 votes

@Musikero31 J'utilise EF et je définis toutes les chaînes de connexion des entités dans le code. Je n'ai rien dans une configuration qui s'y rapporte.

0 votes

Après avoir copié les fichiers DAL dans un nouveau projet, j'ai également reçu l'erreur ci-dessus. En regardant de plus près les fichiers de configuration, j'ai remarqué que la chaîne de connexion était remplacée par EF. J'ai pu copier/coller manuellement la chaîne de connexion correcte dans le nouveau projet et cela a fonctionné.

9voto

Walt Stoneburner Points 1112

J'ai rencontré ce problème lorsque j'ai essayé de placer ma logique de base de données personnalisée dans un fichier .dll destiné à être utilisé par plusieurs projets dans ma solution.

Bien que le fichier .dll ait le bon fichier app.config, il ne fonctionnait pas. Les cadres d'entités voulaient les informations de connexion dans le fichier app.config du fichier .exe. Copier les informations dans ce fichier a fonctionné sans problème.

La solution proposée par Morteza, qui consiste à coller la chaîne de connexion directement dans le fichier .edmx, n'a pas fonctionné pour moi, car elle ne m'a pas permis de coller la valeur dans le fichier - alors que c'est précisément ce que je voulais pouvoir faire.

3 votes

Même s'il n'y avait qu'un app.config (et c'était le seul fichier de configuration dans ce répertoire) dans le répertoire de mon exe, il ne le lisait pas. J'ai dû renommer le fichier myExe.exe.config.

6voto

MaltaCoders Points 41

Bonjour, j'ai eu ce problème et ça me rendait folle. Mais j'ai finalement trouvé le problème. La première chose que vous devez faire est de vous assurer que les connectionstrings en app.config y web.config sont les mêmes. Ensuite, vous devez double-cliquer sur le .edmx pour que vous puissiez voir les tableaux. Une fois que vous y êtes, cliquez n'importe où près des tableaux mais pas sur les tableaux et allez dans les propriétés. Dans la liste déroulante, sélectionnez l'option ConceptualEntityModel et recherchez le nom du conteneur de l'entité et mémorisez-le bien.

Ensuite, allez dans le concepteur du fichier edmx et ouvrez les constructeurs. (le concepteur est le sous-dossier du fichier edmx) les constructeurs doivent avoir deux paramètres dans le paramètre BASE

public DBEntities() : base("name=DBEntities", "DBEntities")
    {
        this.ContextOptions.LazyLoadingEnabled = true;
        OnContextCreated();
    }

C'est l'un d'entre eux. Le premier paramètre doit avoir le nom du fichier de projet dans lequel l'outil d'évaluation de l'impact sur l'environnement est installé. .edmx est en place. Le second paramètre doit avoir le nom du conteneur de l'entité à partir des propriétés dont j'ai parlé précédemment. n'oubliez pas d'arranger tous les constructeurs avec le : base("", "")

Du moins, c'était mon problème et mon problème a été résolu comme ça. J'espère que vous parviendrez à résoudre le vôtre de cette façon.

6voto

S. Baggy Points 132

J'avais une variation sur ça que personne ne semblait couvrir.

J'avais un projet principal avec quelques modèles, et un projet de test contenant des tests unitaires. Le projet de test fonctionnait, mais s'est arrêté avec l'erreur mentionnée dans l'OP. Je n'avais pas renommé ou déplacé le fichier EDMX.

De nombreux conseils mentionnent la comparaison des fichiers .config, mais mon projet n'en avait aucun.

Finalement, j'ai copié le fichier app.config du projet principal dans mon projet de test et cela a fonctionné. Je ne sais pas si cette étape est la bonne, ou si elle posera des problèmes de maintenance lorsque des modèles supplémentaires seront ajoutés, mais au moins mes tests unitaires fonctionnent à nouveau correctement.

0 votes

Depuis que j'ai posté ce message, j'ai réalisé qu'il serait probablement préférable de créer un lien vers le fichier app.config d'un autre projet. Mais l'autre approche fonctionnera quand même pour résoudre le problème initial lorsqu'il n'y a pas de fichier de configuration du tout.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X