wake-up-neo.net

Entity Framework - Die angegebene Metadatenressource kann nicht geladen werden

Mir ist klar, dass dies mehrmals gefragt wurde, aber ich scheine einfach nicht den Grund meines Problems zu finden. Ich erhalte den folgenden Fehlerstapel:

enter image description here

Wenn ich meine DLL nachdenke, kann ich folgendes sehen

enter image description here

Das Lesen von http://blogs.teamb.com/craigstuntz/2010/08/13/38628/ legt nahe, dass ich die csdl-, msl- und ssdl-Dateien hier sehen würde, aber sie sind es nicht. Sie existieren hier jedoch obj\Debug\edmxResourcesToEmbed.

Trotzdem habe ich versucht, der web.config explizit mitzuteilen, wo sie suchen soll:

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

Was nur einen Fehler wirft, dass es die DLL nicht finden kann:

Assembly 'DllName.dll' kann nicht aufgelöst werden. 

Sehr ähnlich dieser ungelösten SO - Frage Assembly Model.dll kann nicht aufgelöst werden

Als letztes habe ich versucht, die Metadatenzeile zu ändern:

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

Dies warf eine Nachricht über sql ce, die ich nicht verwende - gibt es eine Möglichkeit, dies zu umgehen ??

enter image description here

Kann ich noch etwas probieren? Oder kann jemand sehen, wo ich falsch liege? Einige zusätzliche Details:

  • Verwenden von EF 6 EDMX auf "Embedded Resource" gesetzt 

  • In Ausgabeverzeichnis kopieren: "Nicht kopieren" 

  • Metadaten-Artefaktverarbeitung: "In Ausgabe einbetten Assembly"

Zum Schluss noch - wenn ich EDMX von Embedded Resource auf EntityDeploy setze, funktioniert das zwar lokal, aber nicht auf dem Build-Server, da es den gleichen Fehler wie diese SO - Frage auslöst: 

Konnte den konzeptionellen Schemaknoten nicht finden, um als Ressource für die Eingabedatei eingebettet zu werden

Das Update scheint jedoch nicht zu helfen und ich kann .NET 4.5 leider nicht auf dem Server installieren.

31
Steve Newstead

Also bin ich dem auf den Grund gegangen, zum Teil glaube ich, dass das meine Schuld war. Ich werde für jedes Problem, dem ich begegnet bin, Lösungen hinzufügen, falls es anderen hilft.

Das angegebene Problem mit der Metadatenressource kann nicht geladen werden.

Dies wurde durch die Einstellung der Einstellung 'Metadata Artifact Processing' für das edmx-Modell von "EntityDeploy" auf "Embedded Resouce" verursacht.

Dies bedeutete, dass die gesamte edmx-Datei in die DLL eingebettet wurde und stattdessen die Dateien ssdl, msl und csdl nicht generiert wurden. 

Ich denke, Sie müssen dies auf EntityDeploy setzen, damit dies funktioniert und diese Dateien korrekt generiert. Hier macht vollkommener Sinn und unser schlechtes.

Assembly 'DllName.dll' kann nicht aufgelöst werden}

Dies wurde von Andrew in den obigen Kommentaren gelöst, danke für den Hinweis darauf.

Konnte den konzeptionellen Schema-Knoten nicht als Ressource für die Eingabedatei einbetten.

Der Schlüssel zu diesem ganzen Problem ist wirklich: Unser Build-Server ist derzeit auf Windows 2003 installiert. Daher kann .NET 4.5 nicht installiert werden. Wir haben EF 6.1 auf VS2013 unter .NET 4.0 ausgeführt.

Aus irgendeinem Grund sieht es jedoch so aus, als müssten wir .NET 4.5 auf unserem Build-Server installiert haben, damit dies erstellt werden kann, obwohl wir keine der 4.5-Funktionen verwenden und das .NET 4-Framework anvisieren. 

Durch das Downgrade auf EF auf 4.3 wurde dieses Problem kurzfristig für uns gelöst. Nicht ideal, aber es hat funktioniert.

15
Steve Newstead

Ich hatte das gleiche Problem ... Nach dem Verschieben der .edmx-Datei mit dem EF-Modell, um den erwähnten Assembly-Fehler zu trennen, verursachten meine Kopfschmerzen: "Die angegebene Metadatenressource kann nicht geladen werden.

EF Version 6.1

Lösung:

Alter Wert:

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

Neuer Wert:

metadata=res://*/DataModel.csdl

Anfangs befand sich .edmx im Projektordner und ich habe es in das Stammverzeichnis des Projekts verschoben.

38
user2523651

sie sollten den vollständig qualifizierten Namen der Assembly und einen Pfad zu Ihrer Modelldatei (getrennt durch /) angeben, nicht den Namen der DLL

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

dasselbe für ssdl und msl

11
Andrew

Ändern Sie die Metadaten 

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

Zu

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

Die obige Änderung wird das Problem beheben

9
Sathish

Lösung:
1) Öffnen Sie die .edmx-Datei aus Visual Studio.
2) Klicken Sie auf eine beliebige Stelle.
3) Sollte das Eigenschaftsfenster von edmx sehen.
4) Ändern Sie den Namespace in den richtigen Ordnernamen.
5) 1 : https://i.stack.imgur.com/6sZvo.png (wählen Sie ein Bild aus, um weitere Informationen zu erhalten). 

5
Geniuslead

Ich hatte das gleiche Problem 

System.Data.MetadataException: Die angegebene Metadatenressource kann nicht geladen werden

Es stellte sich heraus, dass die zuvor generierte Verbindungszeichenfolge den gesamten Namen von edmx enthielt. Ich nahm alle Modellnamen aus der Verbindungszeichenfolge heraus und beließ nur die unten stehende Zeichenfolge in meinen Metadaten

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

Das hat bei mir funktioniert.

4
rvgenius

Wenn Sie die dotnet-CLI verwenden

Für neuere Besucher, die das neue dotnet build-Tool zum Erstellen von Entity Framework 6.x-basierten Projekten verwenden, ist zu beachten, dass derzeit keine Metadaten in das endgültige Build eingebettet wird. Wenn Sie also von VS aus laufen, wird es ausgeführt. Wenn Ihre CI-Skripts jedoch dotnet verwenden, schlagen sie auf dem Server fehl, bis Sie wieder zu msbuild wechseln. IMHO, das ist ein Fehler und die Tools sollten damit umgehen. Sie können den GitHub-Thread bei Bedarf läuten.

3
DeepSpace101

Ich habe tatsächlich diesen identischen Fehler erhalten, weil meine Entity Framework-Verbindungszeichenfolge auf eine gültige Datenbank verweist, jedoch auf die inkorrekte Datenbank.

Wenn Sie die folgenden Instanzen in SQL Server haben:

  • MeineDatenbank1
  • MeineDatenbank2

Stellen Sie sicher, dass die Verbindungszeichenfolge auf die Datenbank " same " verweist, mit der der .EDMX verbunden ist und aus der er generiert wurde. Ist offensichtlich genug, aber beim Kopieren von EF-Verbindungseinstellungen von einem Projekt in ein anderes wurde dieser Fehler gemacht und das Nettoergebnis war die Unable to load the specified metadata resource-Nachricht. Sobald ich die richtige Verbindungszeichenfolge verwendet habe, die auf die richtige Datenbank und Assembly verweist, wurde der Fehler behoben.

Am einfachsten ist es, die in der .config-Datei neben der .EDMX-Datei erstellte original - Verbindungszeichenfolge zu nehmen und bei Bedarf zu kopieren, um sicherzustellen, dass subtile oder geringfügige Auslassungen/Fehler nicht gemacht werden und EF nicht ordnungsgemäß geladen/verbunden wird.

3
atconway

Ich habe den gleichen Fehler bekommen. Meine Verbindungszeichenfolge war wie folgt 

 <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" />

Ich habe es in Folgendes geändert und das Problem behoben

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

Beachten Sie beim Verschieben der edmx-Datei aus einer Webanwendung auf eine Datenschicht (web.config-connection/app.config-connection), dass Sie die Verbindungszeichenfolge in der Datenschicht UND die Webservice-Schicht ändern (sonst verwendet man zwei verschiedene Verbindungszeichenfolgen, was ein solches Problem verursacht)

2
Raymond Fraikin

Ich habe EF6 in meinem Visual Studio 2013 verwendet. Ich habe dies mit den folgenden Schritten gelöst.

  • Klicken Sie mit der rechten Maustaste auf das Entity-Modell
  • Mit XML (Text) Editor öffnen
  • im Tag-Set ProviderManifestToken="2008"
  • lösung bauen 

Hoffe es funktioniert für dich ..

1
Bikash Kumar

Ich habe dieses Problem gefunden und es hat mich viele, viele Male gebissen, und ich vergesse immer, wie ich es beheben kann.

Alles was ich tun musste, ist default.aspx als Startseite festzulegen.

Offensichtlich hilft das nicht jedem, aber in meinem Fall habe ich meine Konfig, Verbindungszeichenfolge überprüft ...

Hoffe das hilft jemandem, oder zumindest wenn ich das nächste Mal google, werde ich meinen Fix finden. :)

1
Gina Marano

Die Verbindungszeichenfolge "metadata = res" sollte mit dem Edmx-Namen identisch sein. z.B

metadata=res://*/EmployeeModel.csdl 

dieser EDMX-Name sollte EmployeeModel sein.

1
Rajeev

Ich möchte meine Erfahrungen teilen darüber und wie ich es gelöst habe . In meinem Fall passiert das, weil ich kopiere und meine Verbindungszeichenfolge auf Produktionsserver . Meine Anwendung verwendete Entity Framework .

Problem lag bei Metadaten

Ich benannte mein entity-Modell als 'BetModel', aber in meiner Verbindungszeichenfolge verwendete ich 'Entity' - 'res: // /Entity.csdl | res:// /Entity.ssdl | res: //*/Entity.msl 'zu' Metadaten '(Grund dafür war, dass ich sie kopiert habe).

Mein falscher ConnectionString war also:

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;"

und der korrigierte ConnectionString war:

<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

Ich teile meinen Code mit einem anderen Entwickler, und er hatte dieses Problem. Keine Unterschiede in der Verbindungszeichenfolge. Alle Dateien OK ....__ Ich habe es durch die Einstellung behoben 

  • Metadaten-Artefaktverarbeitung von: "In Ausgabebaugruppe einbetten" bis "In Ausgabeverzeichnis kopieren", 
  • das Projekt neu aufbauen, 
  • und dann wieder zurücksetzen.

Ich gehe davon aus, dass dies funktioniert hat, da die einzelnen Dateien (CSDL-/MSL-/SSDL-Dateien) im Ausgabeverzeichnis erstellt wurden, als "Kopieren in Ausgabeverzeichnis" verwendet wurde. Anscheinend gab es einen Fehler, der dazu führte, dass die Embedded-Version funktionierte.

0
davaus

Ich habe dies mehrmals getroffen, als ich mich zwischen Entwicklungsmaschinen bewegte, nachdem der Code von der Quellcodeverwaltung heruntergezogen wurde. Normalerweise muss ich das Projekt nur explizit mit der EDMX-Datei neu erstellen. 

0
voidsstr