734 Stimmen

MetadataException: Die angegebene Metadaten-Ressource kann nicht geladen werden

Plötzlich bekomme ich immer wieder eine MetadataException bei der Instanziierung meiner generierten ObjectContext Klasse. Die Verbindungszeichenfolge in App.Config sieht korrekt aus - hat sich nicht geändert, seit es das letzte Mal funktionierte - und ich habe versucht, ein neues Modell (edmx-Datei) aus der zugrunde liegenden Datenbank zu regenerieren, ohne dass sich etwas geändert hat.

Hat jemand eine Idee?

Weitere Einzelheiten: Ich habe keine Eigenschaften geändert, ich habe den Namen der Ausgabebaugruppen nicht geändert, ich habe nicht versucht, das EDMX in die Baugruppe einzubetten. Ich habe lediglich 10 Stunden gewartet, vom Verlassen der Arbeit bis ich zurückkam. Und dann hat es nicht mehr funktioniert.

Ich habe versucht, das EDMX neu zu erstellen. Ich habe versucht, das Projekt neu zu erstellen. Ich habe sogar versucht, die Datenbank von Grund auf neu zu erstellen. Kein Glück, was auch immer.

17 Stimmen

Wenn eine Frage SO zu einem bestimmten Produkt mehr als 200k Aufrufe hat, dann funktioniert das Produkt nicht so, wie die Nutzer es erwarten. Ich würde mir wünschen, dass Microsoft sich dieses Problems annimmt. Hier ist ein Link, über den Sie ihnen Vorschläge machen können, wenn Sie Zeit haben: visualstudio.uservoice.com/forums/121579-visual-studio .

1 Stimmen

Mein Problem gelöst, durch Ersetzen der Verbindung-Zeichenfolge aus db-Layer-Projekt kopiert.

0 Stimmen

Ich habe auch dieses Problem, ich nur sauber und neu erstellen Lösung, die gut funktioniert.

5voto

Internet Engineer Punkte 2454

Ich war in der Lage, dies in Visual Studio 2010, VB.net (ASP.NET) 4.0 zu beheben.

Während des Assistenten für Entitätsmodelle können Sie die Entitätsverbindungszeichenfolge sehen. Von dort aus können Sie sie kopieren und in Ihre Verbindungszeichenfolge einfügen.

Das Einzige, was mir fehlte, war der "App_Code." in der Verbindungszeichenfolge.

entityBuilder.Metadata = "res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl"

0 Stimmen

Leider ist die Verbindungszeichenfolge im Assistenten für app.config nicht korrekt. @leqid schlug einen guten Weg vor, um den Pfad zum Modell zu fixieren.

4voto

Janmon Punkte 41

In meinem Fall war dieses Problem mit der Umbenennung der edmx-Datei meines Modells verbunden... die Korrektur der app.config-Verbindungszeichenfolge für die csdl/ssdl/msl-Dateien hat mein Problem behoben.

Wenn Sie den EF 4.0 Designer verwenden, um Ihre csdl/ssdl/msl zu generieren, werden diese 3 "Dateien" tatsächlich in der Haupt-Edmx-Datei des Modells gespeichert. In diesem Fall trifft der Beitrag von Waqas ziemlich genau ins Schwarze. Es ist wichtig zu verstehen, dass "Model_Name" in seinem Beispiel in den aktuellen Namen der .edmx-Datei Ihres Modells (ohne das .edmx) geändert werden muss.

Wenn sich Ihre edmx-Datei nicht auf der Stammebene Ihres Projekts befindet, müssen Sie außerdem vor Model_Name den relativen Pfad angeben, z. B.

res://*/MyModel.WidgetModel.csdl|res://*/MyModel.WidgetModel.ssdl|res://*/MyModel.WidgetModel.msl

würde angeben, dass die csdl/ssdl/msl xml in der Modelldatei "WidgetModel.edmx" gespeichert ist, die sich in einem Ordner namens "MyModel" befindet.

4voto

JWP Punkte 6290

Mein Problem und die Lösung, die Symptome waren die gleichen "Unable to load the specified metadata resource" aber die Grundursache war anders. Ich hatte 2 Projekte in der Lösung, eines war das EntityModel und das andere die Lösung. Ich habe die EDMX-Datei im EntityModel tatsächlich gelöscht und neu erstellt.

Die Lösung war, dass ich zum Webanwendungsprojekt zurückgehen und diese Zeile in die Konfigurationsdatei einfügen musste. Das neue Modell hatte einige Elemente geändert, die in der Web.Config-Datei des "anderen" Projekts dupliziert werden mussten. Die alte Konfiguration war nicht mehr gültig.

     <add name="MyEntities"
     connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;
                    provider=System.Data.SqlClient;
                    provider connection string=&quot;
                    data source=Q\DEV15;initial catalog=whatever;
                    user id=myuserid;password=mypassword;
                    multipleactiveresultsets=True;
                    application name=EntityFramework&quot;"
     providerName="System.Data.EntityClient" />

4voto

J. Steen Punkte 15220

Die ultimative Lösung (auch nach der Neuerstellung der Datenbank auf zwei anderen Rechnern sowie des EDMX und anderer Kleinigkeiten) bestand darin, die erste Ausgabe von Entity Framework nicht zu verwenden. Ich freue mich darauf, es in .NET 4.0 erneut zu evaluieren.

Nachdem ich auf das gleiche Problem gestoßen bin wieder und auf der Suche nach einer Antwort fand ich schließlich jemanden, der das gleiche Problem hatte. Es scheint, dass die Verbindungszeichenfolge vom Assistenten von Visual Studio nicht korrekt generiert wurde und dass im Link zu den Metadaten-Ressourcen ein wichtiger Pfad fehlte.

v1.0 BUG? Die angegebene Metadaten-Ressource kann nicht geladen werden. Skripte != Modelle

Update 2013-01-16 : Nach der Umstellung auf die fast ausschließliche Verwendung von EF Code First-Verfahren (auch bei bestehenden Datenbanken) ist dieses Problem kein Thema mehr. Für mich war das eine praktikable Lösung, um das Durcheinander von automatisch generiertem Code und Konfiguration zu reduzieren und meine eigene Kontrolle über das Produkt zu erhöhen.

3voto

Robocide Punkte 5920

Für alle von Ihnen SelftrackingEntities Benutzer, wenn Sie dem Microsoft Walk-through gefolgt sind und die Objektkontextklasse in das das wcf-Dienstprojekt (durch Verknüpfung mit dem Kontext .tt), so ist diese Antwort für Sie:

Teil der in diesem Beitrag gezeigten Antworten, der Code wie :

... = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", 
        typeof(YourObjectContextType).Assembly.FullName); 

WILL NICHT FÜR SIE ARBEITEN! Der Grund dafür ist, dass YourObjectContextType.Assembly befindet sich jetzt in einer anderen Baugruppe (innerhalb der wcf-Projektbaugruppe),

Sie sollten also ersetzen YourObjectContextType.Assembly.FullName mit -->

ClassTypeThatResidesInEdmProject.Assembly.FullName 

Spaß haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X