J'ai de sérieux problèmes avec Entity Framework et je n'arrive pas à comprendre ce qui se passe.
J'ai essayé de nombreuses options fournies sur: MetadataException: impossible de charger la ressource de métadonnées spécifiée et la publication du célèbre blog de Craig Stuntz à l'adresse: http://blogs.teamb.com/craigstuntz/2010/08/13/ 38628/
J'ai 3 projets par souci de brièveté:
Funscribe.Data (fichier EDMX situé ici)
Funscribe.Console (application console)
Funscribe.Web (application MVC 3)
À l'origine, il ne s'agissait que de l'application MVC et j'ai récemment ajouté ce nouveau projet de console.
J'ai copié la chaîne de connexion à partir de web.config et je l'ai appliquée à mon app.config:
<add name="FundirectoryEntities" connectionString="metadata=res://*/Fundirectory.csdl|res://*/Fundirectory.ssdl|res://*/Fundirectory.msl;provider=System.Data.SqlClient;provider connection string="data source=localhost\sqlexpress;initial catalog=Funscribe;user id=sys_Funscribe;password=blah;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
Mon application MVC continue de fonctionner, mais lorsque je lance l'application de la console, je reçois ce que je redoutais:
"Impossible de charger la ressource de métadonnées spécifiée."
J'ai essayé de changer la chaîne de connexion avec le paramètre générique:
<add name="FundirectoryEntities" connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider connection string="data source=localhost\sqlexpress;initial catalog=Funscribe;user id=sys_Funscribe;password=blah;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
Je reçois: Le nom EntityContainer par défaut «FundirectoryEntities» est introuvable dans les informations de mappage et de métadonnées.
J'ai essayé de le changer pour spécifier l'assembly:
<add name="FundirectoryEntities" connectionString="metadata=res://Funscribe.Data.dll/Fundirectory.csdl|res://Funscribe.Data.dll/Fundirectory.ssdl|res://Funscribe.Data.dll/Fundirectory.msl;provider=System.Data.SqlClient;provider connection string="data source=localhost\sqlexpress;initial catalog=Funscribe;user id=sys_Funscribe;password=blah;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
Je reçois: Impossible de résoudre l'assembly 'Funscribe.Data.dll'.
Je suis perdu sur ce que je devrais faire ici. Je viens de mettre à niveau ce projet vers Visual Studio 2012 (je présente cette nouvelle application de console après la conversion en VS 2012).
J'ai également remarqué que le fichier Funscribe.Data.dll se trouve dans le dossier bin du projet de console. J'ai supprimé manuellement ces fichiers et je les ai regardés se recréer. (Et ce qui m'énerve, l'application Web continue de fonctionner correctement)!
Tous les projets sont sur .NET 4.0. L'application de la console utilise .NET 4.0 et non la version du profil du client.
Toute aide à ce sujet est grandement appréciée.
Le paramètre de métadonnées pour une application avec un modèle Entity Framework appelé Model.edmx
dans un assembly appelé Simple Mvc.Data.dll
pourrait ressembler à ceci:
<connectionStrings>
<add name="MyEntities" connectionString="metadata=
res://Simple Mvc.Data.dll/Model.csdl|
res://Simple Mvc.Data.dll/Model.ssdl|
res://Simple Mvc.Data.dll/Model.msl;provider= <!-- ... -->
Vous pouvez donc voir qu’il existe une référence pour chacune des trois parties d’EDMX dont nous avons besoin au moment de l’exécution. Ils fonctionnent tous de la même manière, examinons donc de plus près le premier. La référence CSDL ressemble à ceci:
res://Simple Mvc.Data.dll/Model.csdl
Il précise trois choses:
Nous chargeons le CSDL à partir d’une ressource. C’est le "res://" part.
Nom de l'assembly qui contient la ressource, "Simple Mvc.Data.dll"
. Si votre assemblée est nommée fort, vous pouvez spécifier un nom fort, dans toute sa gloire verbeuse, ici.
Le nom de la ressource elle-même, "Model.csdl"
. Ne confondez pas ceci avec l'EDMX ou le nom du modèle. Dans ce cas, ils sont identiques, à l’exception de l’extension, mais ce n’est pas toujours vrai!
Cela échouera probablement si vos ressources n’ont pas les mêmes ressources nommez votre modèle, ou si l’assemblée ne se trouve pas chargée.
Pour plus d'informations, consultez cette rubrique Résolution des problèmes liés aux chaînes de connexion Entity Framework
J'espère que cela vous aidera.
La solution de reconstruction dans Visual Studio m'a aidé.
C'est sur Build -> Rebuild
Dans mon cas, le connectionString essaie de trouver les fichiers de ressources mais ne peut pas. Ce que j'ai fait pour résoudre mon problème est:
Cliquez avec le bouton droit sur le diagramme EDMX -> Aller aux propriétés -> Connexion -> Traitement des artefacts de métadonnées -> Puis passez à Copier dans le répertoire de sortie et reconstruisez.
Cela modifiera le chemin de votre chaîne de connexion de métadonnées aux ressources qu'il essaie de trouver.
dans mon cas, je supprime mon fichier EDMX dans le projet et le crée à nouveau sous un nouveau nom, par exemple. Avant Home_Model, plus tard, il s'agit de Home_Cost . Lorsque j'essaie d'appeler le code ci-dessous, le message "Impossible de charger la ressource de métadonnées spécifiée". Erreur./////
using (var currentEntities = new masterEntities())
{
currentUser = currentEntities.Home_User.FirstOrDefault(
x => x.UserLoginAccount == userLoginAccount && x.UserPwd == userPwd);
}
////so dans Web.config, je modifie la configuration de métadonnées de Home_Model à Home_Cost.
alors cela fonctionne . évidemment, VS2015 (ma version) n'a pas mis à jour web.config lorsque je supprime/crée edmx.
MetadataException: impossible de charger la ressource de métadonnées spécifiée
Cela signifie que l'application est incapable de charger l'EDMX.
Cela peut être dû à plusieurs facteurs, mais le plus probablement, en raison d'une chaîne de connexion non valide.
Solutions possibles:
1.Vérifiez la chaîne de connexion 2.Refresh model.edmx3.Sélectionnez l'option "Mettre à jour le modèle à partir de la base de données" dans model.edmx.