MetadataException: Impossible de charger les métadonnées définies ressources
Tout d'un coup je reçois un MetadataException
sur l'instanciation de mon généré ObjectContext
classe. La chaîne de connexion dans l'Application.Config semble correct - n'a pas changé depuis la dernière fois cela a fonctionné et j'ai essayé de régénérer un nouveau modèle edmx (fichier) à partir de la base de données et aucun changement.
Quelqu'un a des idées?
Plus de détails: je n'ai pas changé de toutes les propriétés, je n'ai pas changé le nom de toute sortie assemblées, je n'ai pas essayé d'intégrer l'EDMX dans l'assemblée. J'ai simplement attendu 10 heures de quitter son poste de travail jusqu'à ce que j'ai reçu. Et puis, il ne fonctionnait plus.
J'ai essayé de recréer l'EDMX. J'ai essayé de recréer le projet. J'ai même essayé de recréer la base de données, à partir de zéro. Pas de chance, que ce soit.
- Si une question à propos d'un produit qui a plus de 200k points de vue, alors que le produit ne fonctionne pas de la manière dont les utilisateurs s'attendent. Je voudrais voir de Microsoft à cette adresse. Voici un lien vers leur donner des suggestions si vous en avez le temps: visualstudio.uservoice.com/forums/121579-visual-studio.
- Mon problème est résolu, par le remplacement de chaînes de connexion copié à partir de la bd-couche projet.
Vous devez vous connecter pour publier un commentaire.
Cela signifie que l'application est impossible de charger l'EDMX. Il y a plusieurs choses qui peuvent causer cela.
En bref, il n'y a pas vraiment assez de détails à votre question de donner une réponse précise, mais j'espère que ces idées devraient vous mettre sur la bonne voie.
Mise à jour: j'ai écrit un blog avec plus de suivre les étapes de dépannage.
Run Custom Tool
sur le TT de fichier, mais il ne l'a pas résolu.Cette petite modification aider avec ce problème.
J'ai la Solution avec 3 projet.
changement de
All artifacts loaded into an ItemCollection must have the same version. Multiple versions were encountered.
- enfin pour Npgsql. Seul chemin d'accès complet résolu les deux.Vous pouvez obtenir cette exception lorsque l'Edmx est dans un projet, et vous l'utiliser à partir d'un autre.
La raison en est
Res://*/
est une uri qui pointe vers des ressources dans l'ACTUELLE assemblée. Si le modèle est défini dans un autre assemblée à partir du code qui l'utilise, res://*/n'est pas d'aller travailler parce que la ressource ne peut pas être trouvé.Au lieu de spécifier ‘*’, vous devez fournir le nom complet de l'assemblée à la place (y compris le jeton de clé publique). Par exemple:
Une meilleure façon de construire des chaînes de connexion est avec EntityConnectionStringBuilder:
Si vous rencontrez toujours l'exception, ouvrez l'assemblage de réflecteur et de vérifier les noms de fichiers pour votre .csdl, .lsed et .msl fichiers. Lorsque les ressources ont des noms différents de ceux spécifiés dans la valeur des métadonnées, il ne va pas au travail.
res://MyAssembly/folder.<filename>.csdl...
J'ai eu une erreur similaire. J'avais recréé le projet (une longue histoire), et a tiré tout de l'ancien projet. Je n'avais pas réalisé que mon modèle avait été dans un répertoire appelé 'Modèle' avant, et était maintenant dans un répertoire appelé "Modèles". Une fois j'ai changé le lien dans mon site Web.Config à partir de ceci:
à ceci:
Tout a fonctionné (modifié
Model
àModels
). Notez que j'ai dû changer trois endroits dans cette chaîne.Et un moyen rapide de vérifier le nom du modèle sans Réflecteur.... recherchez le répertoire
et vérifier que l' .csdl, .msl, et .lsed fichiers de ressources sont là. Si ils sont dans un sous-répertoire, le nom du sous-répertoire doit être ajouté au début du nom du modèle.
Par exemple, mes trois fichiers de ressources sont dans un sous-répertoire Données, donc ma chaîne de connexion devait être
(par rapport à des métadonnées=res://*/Monmodèle.csdl|res://*/Monmodèle.lsed|res://*/Monmodèle.msl;).
J'ai aussi eu ce problème et c'était à cause de la connectionstring dans mon web.config était légèrement différent de celui dans l'application.config de l'assemblée où mon EDMX est situé. Aucune idée de pourquoi il a changé, mais voici les deux versions différentes.
App.config:
Web.config:
Qu'est-ce résolu, c'était simplement la copie de l'application.chaîne de configuration (notez la petite différence à la fin - au lieu de "
App=EntityFramework
" il voulait "application name=EntityFramework
") sur le web.config et le problème a été résolu. 🙂The .NET Framework data provider for SQL Server (SqlClient) supports many keywords from older APIs, but is generally more flexible and accepts synonyms for many of the common connection string keywords.
Entité Cadre de chaînes de connexion ne partageons pas cette flexibilité, de sorte que vous devez utiliser uniquement les mots-clés, il attend.Ce qui m'est arrivé lorsque j'ai accidentellement à commutation de l'Action de génération du fichier edmx (apparaît sous Propriétés dans l'IDE) à partir de 'EntityDeploy' à 'None'. EntityDeploy est ce qui remplit les métadonnées pour vous: voir http://msdn.microsoft.com/en-us/library/cc982037.aspx
Je viens de passer un joyeux 30 minutes avec ce. J'avais renommé les entités de l'objet, renommé l'entrée dans le fichier de configuration, mais il ya plus ... à vous de modifier la référence à la csdl ainsi
très facile de rater si vous êtes de renommage, assurez-vous d'obtenir tout ....
J'ai eu le même problème. J'ai regardé dans mon respectées dll avec réflecteur et ont vu que le nom de la ressource n'était pas droit. J'ai renommé et il semble bien maintenant.
Pour mon cas, il est résolu en changeant les propriétés de fichier edmx.
cela a résolu le problème pour moi.
Le problème est que, lorsque le conteneur essayer de trouver les méta-données, il ne peux pas le trouver. donc tout simplement le faire dans le même assemblée.
cette solution ne fonctionnera pas si vous avez votre edmx fichiers dans une autre assemblée
J'ai passé une journée entière sur cette erreur
si vous travaillez avec
n-tear architecture
ou vous avez essayé de
separate Models
généré parEDMX
forme DataAccessLayer àDomainModelLayer
peut-être vous obtiendrez cette erreur
webconfig (UILayer)
etappconfig (DataAccessLayer)
sont les mêmesDeuxième qui est Très important la
connection string
qui est le problème
de l'endroit sur terre où j'ai eu
Model
ou quoi que ce soit .csdl dans ma chaîne de connexion où sont-ilsici j'notre solution regardez la photo
espère que l'aide que vous
Ce qui m'arrive quand je n'ai pas de solution propre avant d'en construire de nouvelles .edmx designer. Donc il suffit de ne pas oublier de nettoyer la solution avant de vous en construire de nouvelles .edmx designer. Cela m'aide à sauter beaucoup plus de problèmes avec celui-ci. Ci-dessous la navigation détails fournis au cas où vous êtes nouveau dans visual studio.
Espère que cette aide. Merci à tous
J'ai été en mesure de résoudre ce dans Visual Studio 2010, VB.net (ASP.NET) 4.0.
Au cours de l'entité de modèle de l'assistant, vous serez en mesure de voir l'entité de la chaîne de connexion. De là, vous pouvez copier et coller dans votre chaîne de connexion.
La seule chose qui me manquait était le "App_Code." dans les connexions de la chaîne.
La solution ultime (même après la recréation de la base de données sur deux autres machines, ainsi que l'EDMX et d'autres articles divers) a été de ne pas utiliser la première édition de l'Entity Framework. Hâte de l'évaluation à nouveau .NET 4.0.Après l'exécution dans la même situation nouveau et de recherche pour la réponse, j'ai enfin trouvé quelqu'un qui avait eu le même problème. Il semble que la chaîne de connexion n'est pas correctement généré par Visual Studio assistant, et le lien vers les métadonnées des ressources manquait une voie d'accès importante.
v1.0 BUG?: Impossible de charger les métadonnées définies ressource. Les Scripts != Modèles
Mise à jour 2013-01-16: soit passé à presque exclusivement à l'aide de EF Premier Code de pratiques (même avec les bases de données existantes) ce problème n'est plus un problème. Pour moi, c'était une solution viable pour réduire l'encombrement de l'auto-généré de code et de configuration et d'augmenter ma propre contrôle sur le produit.
Mon problème et de la solution, les symptômes étaient les mêmes "Impossible de charger les métadonnées définies ressource" mais la cause était différent. J'ai eu 2 projets dans la solution était la EntityModel et de l'autre la solution. J'ai effectivement supprimé et recréé le fichier EDMX dans le EntityModel.
La solution était que je devais revenir pour le projet d'Application Web et ajouter cette ligne dans le fichier de configuration. Le nouveau modèle a changé quelques éléments qui devait être dupliquées dans les "autres" du projet Web.Fichier de configuration. L'ancienne configuration n'était plus bonne.
Après des heures de recherche sur google et d'essayer de résoudre aucune des solutions proposées travaillé. J'ai énuméré plusieurs solution ici. J'ai également noté le seul qui a fonctionné pour moi. (J'ai été en utilisant EF version 6.1.1, et SQL server 2014 - mais une ancienne DB)
connectionString="metadata=res://*/DAL.nameModel.csdl|res://*/DAL.nameModel.ssdl|res://*/DAL.nameModel.msl;
(ce sont des fichiers. pour les voir, vous pouvez basculer Afficher Tous les Fichiers dans l'explorateur de solutions, sous ~/obj/.. répertoire)...et beaucoup d'autres encore, j'avais essayé [comme: le retour de la EntityFramework version vers une version ultérieure(pas sûr à ce sujet)]
ce qui a fonctionné pour moi:
de cette l'article ici, il m'a aidé à résoudre mon problème. Je viens de changer mon
ProviderManifestToken="2012"
àProviderManifestToken="2008"
dans le fichier EDMX. Pour ce faire:L'Explorateur De Solutions
J'espère que ça aide.
Dans mon cas, ce problème a été lié à la modification du nom de mon modèle de fichier edmx... la correction de l'application.config chaîne de connexion de la csdl/lsed/msl fichiers fixé mon problème.
Si vous êtes à l'utilisation de l'EF 4.0 designer pour générer votre csdl/lsed/msl, ces 3 "fichiers" en réalité être stockées dans le modèle principal de fichier edmx. Dans ce cas, le poste par la Waqas est assez beaucoup sur la marque. Il est important de comprendre que la "Model_Name" dans son exemple aura besoin d'être changée par le nom de votre modèle .fichier edmx (sans le .edmx).
Aussi, si votre fichier edmx n'est pas au niveau de la racine de votre projet, vous devez faire précéder Model_Name avec le chemin relatif, par exemple
spécifier la csdl/lsed/msl xml est stocké dans le fichier de modèle 'WidgetModel.edmx "qui est stocké dans un dossier nommé "Monmodèle'.
J'ai écrit cette classe d'assistance pour créer des instances de ObjectContext objets lorsqu'ils sont définis dans un projet différent de celui du projet de l'utiliser. J'ai analyser la chaîne de connexion dans le fichier de config et remplacer '*' par le nom de l'assembly.
Il n'est pas parfait car il utilise la réflexion pour construire l'objet, mais il est le plus générique façon de faire que j'ai pu trouver.
Espère que cela aide quelqu'un.
Pour vous tous
SelftrackingEntities
Utilisateurs ,si vous avez suivi les Microsoft de plain-Pied à travers, et séparés du contexte de l'Objet de classe dans
le service wcf projet (en les reliant au contexte .tt) donc cette réponse est pour vous :
partie de l'montré des réponses dans ce post, qui comprend un code comme :
NE FONCTIONNERA PAS POUR VOUS !! la raison en est que
YourObjectContextType.Assembly
réside maintenant dans un autre Assembley (à l'intérieur de la wcf projet de l'assemblée) ,De sorte que vous devez remplacer
YourObjectContextType.Assembly.FullName
avec -->avoir du plaisir.
J'ai eu des problèmes avec ce même message d'erreur. Mon problème a été résolu par la fermeture et de la réouverture de Visual Studio 2010.
Avait même question parce que j'ai renommé un assemblage.
J'ai dû renommer en AssemblyTitle et AssemblyProduct attributs dans les Propriétés du projet/AssemblyInfo.cs, et également la suppression et re ajout de la référence au fichier edmx.
Puis il a très bien fonctionné.
Avec avoir le même problème, j'ai re-créé edmx à partir de la Base de données.
Résout mon problème.
Exception est que le compilateur pointant vers non Métadonnées existantes il suffit donc de Copier
app.config
connectionstring pourWeb.config
ConnectionStringSi vous utilisez l'edmx à partir d'un autre projet, puis dans la chaîne de connexion, changement...
...à...
folder.subfolder
avant.J'ai également eu le même problème et la solution par Rick, sauf que j'étais de l'importation d'un existant .edmx à un nouveau projet, et tandis que la base de l'espace de noms n'ai pas de question, il a été importé dans un répertoire différent, et j'ai également eu à mettre à jour la chaîne de connexion à l'intérieur de Web.Config en trois endroits, à inclure les différents sous-répertoire du nom:
J'ai eu le même problème avec une solution qui contenait des projets dans un Dossier de Solution, quand ils ont été déplacés à la Solution de la Racine (en vue de surmonter l'on soupçonne un bug avec le Mvc3AppConverter en raison des sites du projet).
Bien que la solution compilé après tous* les références du projet ont été ajouté en tant que de besoin, l'erreur est renvoyée lorsque le site a été tiré.
L'EDMX est dans l'un des projets qui a été déplacé (les "Données" du projet), mais, évidemment, l'absence d'une référence aux Données du projet n'a pas de provoquer une erreur de compilation, juste une erreur d'exécution.
Simplement ajouter la référence manquante pour le principal du projet, a résolu ce problème, pas besoin de modifier la connexion à tous.
J'espère que cela aide quelqu'un d'autre.
Une mauvaise application.config ou web.fichier de configuration peuvent le faire.. j'avais copié l'application.config chaîne de connexion à mon site web.config dans mon INTERFACE et finit par entrer:
Simplement, je n'avais pas référencé de ma bibliothèque de classe qui contenait le fichier EDMX.
Parfois je vois cette erreur dans mon projet. - Je résoudre ce problème par
1 - clic Droit sur le fichier EDMX
2 - Sélectionnez
Run Custom Tool
option3 - projet de Reconstruction de
Ma théorie est que si vous avez plus d'un fichier edmx avec le même nom (Model1 par exemple), il va donner à cette exception.
J'ai le même problème quand j'ai décidé de nommer tous mes edmx fichiers (assis dans différents projets) comme Model1 parce que je pensais qu'ils doivent être indépendants.
Une autre cause de cette exception est lorsque vous incluez une table liée dans un ObjectQuery, mais le type dans la mauvaise navigation nom de la propriété.
Exemple:
Parfois l'assembly qui contient le modèle n'est pas chargé:
Le type
MallApp
vit dans la même assemblée que le modèle d'entité. Sans le chargement explicite, unSystem.Data.MetadataException
sera levée.Comme pour moi, je les avait séparé la Couche d'Accès aux Données et la couche d'Interface Utilisateur.
Donc, j'ai entité de la chaîne de connexion pour chaque couche.
Avant que je modifie ces deux séparés des chaînes de connexion pour être le même, j'ai toujours trouvé que l'erreur ci-dessous.
Je fais donc être les mêmes chaînes de connexion pour ces deux couches (DAL , INTERFACE utilisateur), Il travail parfait.
Ma solution est de faire toute la chaîne de connexion à la même, peu importe où ils déjà présenté.
Quand j'ai eu les métadonnées problème réglé, j'ai eu un problème sous la forme d'un invokation exception incapable de trouver une chaîne de connexion pour XXXEntities dans l'app.config (d'où mon but était pas de dépendance sur l'app.config). Par pure chance, j'ai trouvé que le Système de référence.Les données dans mon projet de test d'unité de nettoyer cette ultime obstacle. Donc, pour résumer:
J'ai maintenant mon métadonnées dans une bibliothèque de classes qui peuvent mettre à jour à partir d'une référence db, et je peux point de mon application et les tests unitaires pour toute db sur n'importe quel serveur lors de l'exécution.
Addendum: Quand j'ai déménagé mon edmx à un dossier, j'ai eu l'erreur à nouveau. Après un peu de recherche, j'ai trouvé que vous voulez que vos métadonnées chaîne de ressembler à: metadata=res://EPM.DAL/Modèles.EPM.csdl, où l'EPM.DAL est le nom de l'assemblée, et EPM.edmx est dans le dossier de modèles.
Même problème pour moi. Mon nom de classe a été différent pour mon nom de fichier. La connectionstring générées avait le nom de la classe et non le nom de fichier en. Pour moi, la Solution était tout simplement de renommer mon fichier pour correspondre le nom de la classe.
J'ai eu ce problème hier et était à la recherche de mon code dans le debug et la sortie du générateur de profils SQL.
Que je ne pouvais pas comprendre, avant que j'ai lu et compris ce post, pourquoi EntityFramework jetait cette erreur, comme c'était l'appel de la DB. J'ai été à la recherche à travers des centaines de lignes dans le générateur de profils SQL essayer de travailler sur ce qui n'allait pas avec le modèle de base de données. Je ne pouvais pas trouver quelque chose comme l'appel que j'attendais, et pour être honnête je n'étais pas certain de ce que je cherchais.
Si vous êtes dans cette position, la chaîne de connexion. Ma conjecture est que, avant EntityFramework crée son SQL il vérifie le modèle spécifié dans les métadonnées de la partie de la chaîne de connexion. Dans mon cas, c'était mal. EntityFramework n'était même pas aussi loin que la DB.
Assurez-vous que les noms sont corrects. Une fois j'ai tout trié, j'ai été voir les appels de générateur de profils SQL où la ApplicationName était "EntityFramework" avec SQL appel attendus tables.
À l'aide de l'info de ce billet de blog:
Comme d'autres l'ont dit, res:\\ est un pointeur vers vos ressources. Pour vérifier et assurez-vous que vos noms de ressources sont corrects, vous pouvez utiliser un décompilateur comme DotPeek par JetBrains à ouvrir votre .dll fichier et de voir vos fichiers de Ressources.
Ou vous pourriez ouvrir la fenêtre pendant que vous êtes le débogage et le coller dans le code pour obtenir un tableau des noms de ressources en cours d'exécution de l'assemblée.
Cela étant dit, le format de vos métadonnées chemins doit être quelque chose comme:
{mon-assemblage-nom}/{peut-être-un-espace de noms}.{classe-nom}.{csdl ou lsed ou msl}
J'ai eu cette erreur quand mon emdx fichier a été supprimé par un paquetage de commande, tout simplement. M'a pris un moment avant de savoir que c'était aussi simple que cela.
Suffit de taper le chemin d'accès comme suit au lieu de {Path.D'.L'.}: res:///{Path.To.The.}YourEdmxFileName.csdl|res:///{Path.To.The.}YourEdmxFileName.ssdl|res://*/{Path.To.The.}YourEdmxFileName.msl
Dans mon cas, c'était parce que j'était en train de construire la chaîne de connexion à l'aide d'un EntityConnectionStringBuilder. Assurez-vous que votre propriété de Métadonnées est en utilisant le nom du Modèle (y compris l'espace de noms)
J'ai eu ce problème après le déplacement d'une solution de grande envergure à partir d'un dossier dans l'Explorateur du Contrôle de Source à l'autre. Nous n'avons pas de vérifier le dossier du package dans l'Équipe de la Fondation et donc je pense que VS les paquets téléchargés automatiquement. Ce niveau mon EF forme v6.1.2 v6.1.3.
Le problème a disparu quand j'ai rétrogradé à l'origine v6.1.2.
Dans mon cas, aucune des réponses répertoriées travaillé et je suis donc de poster cette.
Pour mon cas, en s'appuyant sur Visual studio et en l'exécutant avec IIS express a bien fonctionné. Mais quand j'ai été le déploiement à l'aide de scripts Nant comme un stand-alone site internet a été donnant des erreurs. J'ai essayé toutes les suggestions ci-dessus, et alors rendu compte que la DLL qui a été générée par le nant script a été beaucoup plus faible que celui généré par VS. Et puis j'ai réalisé que Nant a été incapable de trouver la .csdl, .msl et .lsed fichiers. Ensuite, il y a vraiment deux façons de résoudre ce problème, l'une est de copier les fichiers nécessaires après visual studio génère et de les inclure ces fichiers dans la construction de déploiement. Et puis dans le Web.config, spécifiez le chemin d'accès comme:
C'est en supposant que vous avez copié manuellement les fichiers dans le répertoire bin du site web qui vous êtes en cours d'exécution. Si c'est dans un autre répertoire, puis modifier le chemin en conséquence.
La deuxième méthode consiste à exécuter EdmGen.exe dans Nant de script et de générer les fichiers puis de les inclure en tant que ressources comme fait dans l'exemple ci-dessous:
https://github.com/qwer/budget/blob/master/nant.build
J'ai aussi face à ce problème, je viens de nettoyer et régénérer la solution qui fonctionne très bien.