web-dev-qa-db-fra.com

Entity Framework - Impossible de charger la ressource de métadonnées spécifiée

Je me rends compte que cela a été demandé à plusieurs reprises, mais je n'arrive tout simplement pas à comprendre le fond de ma question. Je reçois la pile d'erreur suivante:

enter image description here

Quand je réfléchis sur ma dll, je peux voir ce qui suit

enter image description here

Reading http://blogs.teamb.com/craigstuntz/2010/08/13/38628/ / suggère que je m'attendrais à voir les fichiers csdl, msl et ssdl ici, mais ce n'est pas le cas. Ils existent ici cependant obj\Debug\edmxResourcesToEmbed.

Néanmoins, j'ai essayé de dire explicitement à web.config où regarder en faisant ceci:

...connectionString="metadata=res://DllName.dll/PaymentModel.csdl|res://DllName.dll/PaymentModel.ssdl|res://DllName.dll/PaymentModel.msl;provider=System.Data.SqlClient;provider ... />

Ce qui jette juste une erreur en disant qu'il ne peut pas trouver la dll:

Impossible de résoudre l'assembly 'DllName.dll'. 

Très similaire à cette question non résolue SO Impossible de résoudre Assembly Model.dll

La dernière chose que j'ai essayée était de changer la ligne de métadonnées en:

...connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider ... />

Cela a jeté un message sur sql ce que je n'utilise pas - y at-il un moyen de contourner ce problème ??

enter image description here

Y at-il autre chose que je peux essayer? Ou quelqu'un peut-il voir où je me trompe? Quelques détails supplémentaires:

  • Utilisation de EF 6 EDMX sur "Embedded Resource" 

  • Copier dans le répertoire de sortie: "Ne pas copier" 

  • Traitement des artefacts de métadonnées: "Incorporer dans la sortie. Assembly."

Enfin, si je configure EDMX de Embedded Resource sur EntityDeploy, cela fonctionnera localement, mais pas sur le serveur de génération car il renvoie exactement la même erreur que cette question SO: 

Impossible de trouver le nœud de schéma conceptuel à incorporer en tant que ressource pour le fichier d'entrée

Mais le correctif ne semble pas aider et je ne peux malheureusement pas installer .NET 4.5 sur le serveur.

31
Steve Newstead

Donc je suis au fond de ceci, en partie je pense que c'était de ma faute. Je vais mettre des solutions à chaque problème que j'ai rencontré ci-dessous au cas où cela pourrait aider quelqu'un d'autre.

Impossible de charger le problème de ressource de métadonnées spécifié

Cela est dû au fait que j'ai défini le paramètre 'Traitement des artefacts de métadonnées' sur le modèle edmx de "EntityDeploy" à "Ressources incorporées".

Donc, cela signifiait qu'il intégrait tout le fichier edmx dans la dll sans générer les fichiers ssdl, msl et csdl. 

Je suppose que vous devez définir ceci sur EntityDeploy pour que cela fonctionne et générer ces fichiers correctement. Cela fait sens et notre mal ici.

Impossible de résoudre l'assembly 'DllName.dll'

Andrew a résolu ce problème dans les commentaires ci-dessus, merci pour le pointeur à ce sujet.

Impossible de trouver le nœud de schéma conceptuel à incorporer en tant que ressource pour le fichier d'entrée

La clé de tout ce problème est vraiment ceci, notre serveur de build est actuellement sous Windows 2003, donc .NET 4.5 ne peut pas être installé, nous utilisions localement EF 6.1 sur un serveur .NET 4.0 sur VS2013.

Cependant, pour une raison quelconque, il semble que nous ayons besoin d'installer .NET 4.5 sur notre serveur de build pour pouvoir le faire, même si nous n'utilisons aucune des fonctionnalités 4.5 et ne ciblons pas le framework .NET 4. 

Le déclassement de EF à 4.3 a résolu ce problème pour nous à court terme. Pas idéal mais cela a fonctionné.

15
Steve Newstead

J'ai eu le même problème . Après avoir déplacé le fichier .edmx avec le modèle EF pour séparer l'erreur mentionnée par l'assembly a causé mon mal de tête: "Impossible de charger la ressource de métadonnées spécifiée".

EF version 6.1

Solution:

Ancienne valeur:

metadata=res://*/Data.DataModel.csdl

Nouvelle valeur:

metadata=res://*/DataModel.csdl

Initialement, .edmx était dans le dossier du projet et je l’ai déplacé à la racine du projet.

38
user2523651

vous devez spécifier le nom complet d'assembly et un chemin d'accès vers votre fichier de modèle (séparés par /), et non le nom de la DLL

connectionString="metadata=res://Name.Of.The.Assembly, Culture=neutral, PublicKeyToken=8e2e51fcf4cf363e/Payment.PaymentModel.csdl|.........."

idem pour ssdl et msl

11
Andrew

Changer les metaData 

connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;

À

connectionString="metadata=res://*/;

Le changement ci-dessus résoudra le problème

9
Sathish

Solution :
1) Ouvrez le fichier .edmx à partir de visual studio.
2) Cliquez n'importe où.
3) Devrait voir la fenêtre de propriété edmx.
4) Remplacez Namespace par le nom de dossier correct.
5) 1 : https://i.stack.imgur.com/6sZvo.png (sélectionnez l'image pour plus de détails). 

5
Geniuslead

J'avais le même problème 

System.Data.MetadataException: impossible de charger la ressource de métadonnées spécifiée

Il s'est avéré que la chaîne de connexion générée plus tôt contenait le nom de edmx . J'ai extrait tous les noms de modèle de la chaîne de connexion, ne laissant que la chaîne ci-dessous dans mes métadonnées

"metadata=res://*/;provider=System.Data.SqlClient;provider

Cela a fonctionné pour moi.

4
rvgenius

Si vous utilisez le dotnet CLI

Pour les nouveaux visiteurs utilisant le nouvel outil dotnet build pour construire des projets basés sur Entity Framework 6.x, sachez qu’il utilise actuellement n’intègre aucune métadonnée } dans la version finale. Ainsi, si vous exécutez à partir de VS, il s'exécutera, mais si vos scripts CI utilisent dotnet, ils échoueront sur le serveur jusqu'à ce que vous reveniez à msbuild. IMHO, c'est un bug et les outils devraient le gérer. Vous pouvez utiliser le thread GitHub si nécessaire.

3
DeepSpace101

J'ai effectivement reçu cette erreur identique parce que ma chaîne de connexion Entity Framework pointait vers une base de donnéesvalide, mais qu'il s'agissait de la base de données incorrrect.

Si vous avez les instances suivantes dans SQL Server:

  • MyDatabase1
  • MyDatabase2

Assurez-vous que la chaîne de connexion pointe vers la base de données same à laquelle le .EDMX est connecté et a été généré. Cela semble assez évident, mais lors de la copie des paramètres de connexion EF d'un projet à un autre, cette erreur s'est produite et le résultat net est le message Unable to load the specified metadata resource. Une fois que j'ai utilisé la chaîne de connexion correcte pointant vers la base de données correcte et l'assembly, l'erreur a été résolue.

Le plus simple est de prendre la chaîne original connection créée dans le fichier .config situé à côté du .EDMX et de la copier si nécessaire pour vous assurer que des omissions/erreurs mineures ou mineures ne sont pas commises, ce qui empêche EF de ne pas se charger/se connecter correctement.

3
atconway

J'avais la même erreur. Ma chaîne de connexion était la suivante 

 <add name="EmployeeDbContext" connectionString="metadata=res://*/EmployeeModel.csdl|res://*/EmployeeModel.ssdl|res://*/EmployeeModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=Sample;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Je l'ai changé en suivant et il a résolu le problème

<add name="EmployeeDbContext" connectionString="server=.; database=Sample; integrated security=true;"
       providerName="System.Data.SqlClient"/>
2
Ravi Verma

Notez également que lorsque vous déplacez le fichier edmx d’une application Web vers une couche de données (web.config - connection/app.config - connection), vous modifiez la chaîne de connexion dans la couche de données ET la couche de service Web (sinon on utilise deux chaînes de connexion différentes, et cela pose un tel problème)

2
Raymond Fraikin

J'ai utilisé EF6 dans mon studio visuel 2013. J'ai résolu ce problème en procédant comme suit.

  • Clic droit sur le modèle d'entité
  • Ouvrir avec l'éditeur XML (texte)
  • dans le jeu de balises ProviderManifestToken="2008"
  • construire une solution 

J'espère que ça marche pour toi..

1
Bikash Kumar

Je suis tombé sur ce problème et il m’a mordu à maintes reprises et j’oublie toujours comment je règle le problème.

Tout ce que je devais faire était de définir default.aspx comme page de démarrage.

Évidemment, cela n’aidera pas tout le monde, mais dans mon cas, j’ai pris le temps de vérifier ma configuration, ma chaîne de connexion ...

J'espère que cela aidera quelqu'un, ou du moins la prochaine fois que je le chercherai sur Google, je trouverai ma solution. :)

1
Gina Marano

La chaîne de connexion "metadata = res" doit être identique au nom Edmx. par exemple

metadata=res://*/EmployeeModel.csdl 

ce nom EDMX doit être EmployeeModel

1
Rajeev

Je veux partager mon expérience sur ce sujet et comment je l'ai résolu. Dans mon cas, cela se produit parce que je copier et coller ma chaîne de connexion sur serveur de production. Mon application utilisait Entity Framework _.

Le problème était sur les métadonnées

J'ai nommé mon modèle d'entité} sous le nom 'BetModel' mais sur ma chaîne de connexion, j'utilisais 'Entity' - 'res: // /Entity.csdl|res:// /Entity.ssdl | res: //*/Entity.msl 'sur' métadonnées '(parce que je l'ai copié-collé).

Donc, ma mauvaise ConnectionString était:

connectionString="metadata=res://*/Entity.csdl|res://*/Entity.ssdl|res://*/Entity.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=;initial catalog=;persist security info=True;user id=;password=;MultipleActiveResultSets=True;App=EntityFramework&quot;"

et le ConnectionString corrigé était:

<add name="BetEntities" connectionString="metadata=res://*/BetModel.csdl|res://*/BetModel.ssdl|res://*/BetModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=;initial catalog=;persist security info=True;user id=;password=;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
0
yogihosting

Je partage mon code avec un autre développeur et il avait ce problème.Aucune différence de chaîne de connexion. Tous les fichiers sont corrects ...... Je l'ai corrigé en réglant 

  • Traitement des artefacts de métadonnées de: "Incorporer dans l'assemblage de sortie" à "Copier dans le répertoire de sortie", 
  • reconstruire le projet, 
  • puis le remettre en place.

Cela a fonctionné, je suppose, car les fichiers individuels (fichiers CSDL/MSL/SSDL) ont été créés dans le répertoire de sortie lorsqu’il utilisait "copier dans le répertoire de sortie". Apparemment, il y avait un bug qui les nécessitait pour que la version intégrée fonctionne . J'espère que cela vous aidera :)

0
davaus

Je me suis heurté à ce problème plusieurs fois lorsque je passais d'une machine à une autre à la suite du retrait du code du contrôle de source. Il suffit généralement de reconstruire explicitement le projet avec le fichier EDMX. 

0
voidsstr