Plötzlich kann ich MetadataException
meine generierte ObjectContext
Klasse immer wieder instanziieren . Die Verbindungszeichenfolge in App.Config sieht korrekt aus - hat sich seit dem letzten Funktionieren nicht geändert - und ich habe versucht, ein neues Modell (edmx-Datei) aus der zugrunde liegenden Datenbank ohne Änderung neu zu generieren.
Hat jemand irgendwelche Ideen?
Weitere Details: Ich habe keine Eigenschaften geändert, den Namen von Ausgabe-Assemblys nicht geändert und nicht versucht, EDMX in die Assembly einzubetten. Ich habe nur 10 Stunden von der Arbeit gewartet, bis ich zurückkam. Und dann funktionierte es nicht mehr.
Ich habe versucht, den 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.
quelle
Antworten:
Dies bedeutet, dass die Anwendung EDMX nicht laden kann. Es gibt verschiedene Dinge, die dies verursachen können.
Kurz gesagt, Ihre Frage enthält nicht genügend Details, um eine genaue Antwort zu geben, aber hoffentlich sollten diese Ideen Sie auf den richtigen Weg bringen.
Update: Ich habe einen Blog-Beitrag mit vollständigeren Schritten zur Fehlerbehebung geschrieben .
quelle
Diese kleine Änderung hilft bei diesem Problem.
Ich habe Lösung mit 3 Projekt.
ändern
quelle
Sie können diese Ausnahme erhalten, wenn sich der Edmx in einem Projekt befindet und Sie ihn von einem anderen verwenden.
Der Grund ist
Res://*/
ein Uri, der auf Ressourcen in der CURRENT-Assembly verweist. Wenn der Edm in einer anderen Assembly als der Code definiert ist, der ihn verwendet, funktioniert res: // * / nicht, da die Ressource nicht gefunden werden kann.Anstatt '*' anzugeben, müssen Sie stattdessen den vollständigen Namen der Assembly angeben (einschließlich des Tokens für den öffentlichen Schlüssel). Z.B:
Eine bessere Möglichkeit zum Erstellen von Verbindungszeichenfolgen ist EntityConnectionStringBuilder:
Wenn die Ausnahme weiterhin auftritt, öffnen Sie die Assembly im Reflektor und überprüfen Sie die Dateinamen für Ihre CSDL-, SSDL- und MSL-Dateien. Wenn die Ressourcen andere Namen haben als die im Metadatenwert angegebenen, funktioniert dies nicht.
quelle
res://MyAssembly/folder.<filename>.csdl...
Ich hatte einen ähnlichen Fehler. Ich hatte das Projekt neu erstellt (lange Geschichte) und alles aus dem alten Projekt übernommen. Ich hatte vorher nicht bemerkt, dass sich mein Modell in einem Verzeichnis namens "Model" befand und jetzt in einem Verzeichnis namens "Models". Sobald ich die Verbindung in meiner Web.Config von diesem geändert habe:
dazu:
Alles hat funktioniert (geändert
Model
inModels
). Beachten Sie, dass ich diese drei Stellen in dieser Zeichenfolge ändern musste.quelle
Und eine schnelle Möglichkeit, den Modellnamen ohne Reflektor zu überprüfen ... suchen Sie nach dem Verzeichnis
und überprüfen Sie, ob die Ressourcendateien .csdl, .msl und .ssdl vorhanden sind. Wenn sie sich in einem Unterverzeichnis befinden, muss der Name des Unterverzeichnisses dem Modellnamen vorangestellt werden.
Zum Beispiel befinden sich meine drei Ressourcendateien in einem Unterverzeichnis Daten , daher musste meine Verbindungszeichenfolge sein
(versus metadata = res: //*/MyModel.csdl | res: //*/MyModel.ssdl | res: //*/MyModel.msl;).
quelle
Ich hatte auch dieses Problem und es lag daran, dass sich der Verbindungsstring in meiner web.config geringfügig von dem in der app.config der Assembly unterschied, in der sich mein EDMX befindet. Keine Ahnung warum es sich geändert hat, aber hier sind die zwei verschiedenen Versionen.
App.config:
Web.config:
Was behoben wurde, war einfach das Kopieren der app.config-Zeichenfolge (beachten Sie den kleinen Unterschied am Ende - anstelle von "
App=EntityFramework
" es wollte "application name=EntityFramework
") in die web.config und das Problem wurde gelöst. :) :)quelle
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.
Entity Framework-Verbindungszeichenfolgen teilen diese Flexibilität nicht, sodass Sie nur die erwarteten Schlüsselwörter verwenden müssen.Dies ist mir passiert, als ich versehentlich die Build-Aktion der edmx-Datei (wird in der IDE unter Eigenschaften angezeigt) von 'EntityDeploy' auf 'None' umgestellt habe. EntityDeploy füllt die Metadaten für Sie: siehe http://msdn.microsoft.com/en-us/library/cc982037.aspx
quelle
Dies passiert mir, wenn ich die Lösung vor dem Erstellen eines neuen .edmx-Designers nicht bereinige. Vergessen Sie also nicht, die Lösung zu bereinigen, bevor Sie einen neuen .edmx-Designer erstellen. Dies hilft mir, viel mehr Probleme mit diesem zu überspringen. Nachfolgend finden Sie die Navigationsdetails, falls Sie neu in Visual Studio sind.
Hoffe das hilft. Vielen Dank an alle
quelle
Ich habe gerade glückliche 30 Minuten damit verbracht. Ich habe das Entities-Objekt umbenannt, den Eintrag in der Konfigurationsdatei umbenannt, aber es gibt noch mehr ... Sie müssen auch den Verweis auf die CSDL ändern
sehr leicht zu übersehen - wenn Sie umbenennen, stellen Sie sicher, dass Sie alles bekommen ...
quelle
Ich hatte das gleiche Problem. Ich habe in meine konforme DLL mit Reflektor geschaut und festgestellt, dass der Name der Ressource nicht richtig war. Ich habe umbenannt und es sieht jetzt gut aus.
quelle
In meinem Fall wird dies durch Ändern der Eigenschaften der edmx-Datei gelöst.
Dies löste das Problem für mich. Das Problem ist, wenn der Container versucht, die Metadaten zu finden, kann er sie nicht finden. Also mach es einfach in der gleichen Baugruppe. Diese Lösung funktioniert nicht, wenn Sie Ihre edmx-Dateien in einer anderen Assembly haben
quelle
Ich habe einen ganzen Tag mit diesem Fehler verbracht
wenn Sie mit arbeiten
n-tear architecture
oder Sie haben versucht,
separate Models
vomEDMX
Formular DataAccessLayer zu generierenDomainModelLayer
Vielleicht erhalten Sie diesen Fehler
webconfig (UILayer)
und vorhanden istappconfig (DataAccessLayer)
identisch istZweitens ist das sehr wichtig
connection string
Was ist das Problem
von wo um alles in der Welt habe ich bekommen
Model
Woher in aller Welt habe oder was auch immer .csdl in meiner Verbindungszeichenfolge, wo sind sie?hier schaue ich unsere lösung auf das bild
hoffe das hilft dir
quelle
Ich konnte dies in Visual Studio 2010, VB.net (ASP.NET) 4.0 beheben.
Während des Entitätsmodell-Assistenten können Sie die Entitätsverbindungszeichenfolge anzeigen. Von dort aus können Sie kopieren und in Ihre Verbindungszeichenfolge einfügen.
Das einzige was mir fehlte war der "App_Code". in der Verbindungszeichenfolge.
quelle
Nach stundenlangem googeln und dem Versuch, eine der vorgeschlagenen Lösungen zu lösen, funktionierte sie nicht. Ich habe hier mehrere Lösungen aufgelistet. Ich habe auch den notiert, der für mich funktioniert hat. (Ich habe EF Version 6.1.1 und SQL Server 2014 verwendet - aber eine ältere Datenbank)
connectionString="metadata=res://*/DAL.nameModel.csdl|res://*/DAL.nameModel.ssdl|res://*/DAL.nameModel.msl;
(Dies sind Dateien. Um sie zu sehen, können Sie im Lösungs-Explorer unter ~ / obj / .. das Verzeichnis Alle Dateien anzeigen umschalten.)... und viele mehr, die ich versucht hatte [wie: Zurücksetzen der EntityFramework-Version auf eine spätere Version (nicht sicher)]
Was hat bei mir funktioniert:
Von diesem Artikel hier hat es mir geholfen, mein Problem zu lösen. Ich habe gerade meine geändert ,
ProviderManifestToken="2012"
umProviderManifestToken="2008"
in der Datei EDMX. Um dies zu tun:Lösungsforscher
Ich hoffe das hilft.
quelle
Wenn Sie den edmx aus einem anderen Projekt verwenden, ändern Sie in der Verbindungszeichenfolge ...
...zu...
quelle
folder.subfolder
vorher hinzufügen .Die ultimative Lösung (auch nach dem Neuerstellen der Datenbank auf zwei anderen Computern sowie dem EDMX und anderen 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 wieder auf das gleiche Problem gestoßen bin ich und überall nach einer Antwort gesucht hatte, fand ich endlich jemanden, der das gleiche Problem hatte. Es scheint, dass die Verbindungszeichenfolge vom Assistenten von Visual Studio nicht korrekt generiert wurde und dem Link zu den Metadatenressourcen ein wichtiger Pfad fehlte.
v1.0 BUG?: Die angegebene Metadatenressource kann nicht geladen werden. Skripte! = Modelle
Update 2013-01-16 : Nach der Umstellung auf fast ausschließlich EF Code First-Verfahren (auch bei vorhandenen Datenbanken) ist dieses Problem kein Problem mehr. Für mich war dies eine praktikable Lösung, um die Unordnung durch automatisch generierten Code und Konfiguration zu reduzieren und meine eigene Kontrolle über das Produkt zu verbessern.
quelle
Mein Problem und meine Lösung, die Symptome waren die gleichen "Die angegebene Metadatenressource konnte nicht geladen werden", aber die Grundursache war unterschiedlich. Ich hatte 2 Projekte in 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 bestand darin, dass ich zum Webanwendungsprojekt zurückkehren 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 gut.
quelle
Manchmal sehe ich diesen Fehler in meinem Projekt. Ich löse das durch
1 - Klicken Sie mit der rechten Maustaste auf die EDMX-Datei
2 -
Run Custom Tool
Option auswählen3 - Projekt neu erstellen
quelle
In meinem Fall hing dieses Problem mit dem Umbenennen der edmx-Datei meines Modells zusammen. Das Korrigieren der Verbindungszeichenfolge app.config für die Dateien csdl / ssdl / msl hat mein Problem behoben.
Wenn Sie den EF 4.0-Designer zum Generieren Ihrer csdl / ssdl / msl verwenden, werden diese 3 "Dateien" tatsächlich in der edmx-Hauptdatei des Modells gespeichert. In diesem Fall ist der Beitrag von Waqas ziemlich genau richtig. Es ist wichtig zu verstehen, dass "Model_Name" in seinem Beispiel in den aktuellen Namen der .edmx-Datei Ihres Modells (ohne die .edmx) geändert werden muss.
Wenn sich Ihre edmx-Datei nicht auf der Stammebene Ihres Projekts befindet, müssen Sie Model_Name den relativen Pfad voranstellen, z
würde angeben, dass csdl / ssdl / msl xml in der Modelldatei 'WidgetModel.edmx' gespeichert ist, die in einem Ordner namens 'MyModel' gespeichert ist.
quelle
Ich habe diese Hilfsklasse geschrieben, um Instanzen von ObjectContext-Objekten zu erstellen, wenn sie in einem anderen Projekt als dem Projekt definiert sind, das es verwendet. Ich analysiere die Verbindungszeichenfolge in der Konfigurationsdatei und ersetze '*' durch den vollständigen Assemblynamen.
Es ist nicht perfekt, weil es Reflexion verwendet, um das Objekt zu erstellen, aber es ist die allgemeinste Methode, die ich finden konnte.
Hoffe es hilft jemandem.
quelle
Für euch alle
SelftrackingEntities
Wenn Sie Benutzer dem Microsoft Walk-through gefolgt sind und die Objektkontextklasse in das wcf-Dienstprojekt getrennt haben (indem Sie auf den Kontext .tt verlinken), ist diese Antwort für Sie:Teil der angezeigten Antworten in diesem Beitrag, der Code enthält wie:
WIRD NICHT FÜR SIE ARBEITEN !! der
YourObjectContextType.Assembly
grund ist, dass sich jetzt in einer anderen assembley befindet (innerhalb der wcf-projekt-Assembly),Sie sollten also durch
YourObjectContextType.Assembly.FullName
-> ersetzenhabe Spaß.
quelle
Ich hatte Probleme mit derselben Fehlermeldung. Mein Problem wurde durch Schließen und erneutes Öffnen von Visual Studio 2010 behoben.
quelle
Hatte das gleiche Problem, weil ich eine Baugruppe umbenannt habe.
Ich musste es auch in den Attributen AssemblyTitle und AssemblyProduct in Projekteigenschaften / AssemblyInfo.cs umbenennen und den Verweis auf die edmx-Datei löschen und erneut hinzufügen.
Dann hat es gut funktioniert.
quelle
Mit dem gleichen Problem habe ich edmx aus der Datenbank neu erstellt. Löst mein Problem.
quelle
Eine Ausnahme ist, dass der Compiler auf nicht vorhandene Metadaten verweist. Kopieren Sie daher einfach den
app.config
Verbindungsstring in denWeb.config
ConnectionStringquelle
Ich hatte auch das gleiche Problem und die gleiche Lösung wie Rick, außer dass ich eine vorhandene .edmx in ein neues Projekt importierte, und obwohl der Basis-Namespace keine Rolle spielte, wurde er in ein anderes Unterverzeichnis importiert, sodass ich auch die Verbindung aktualisieren musste Zeichenfolge in Web.Config an drei Stellen, um die verschiedenen Namen der Unterverzeichnisse einzuschließen:
quelle
Ich hatte das gleiche Problem mit einer Lösung, die Projekte in einem Lösungsordner enthielt, als sie in den Lösungsstamm verschoben wurden (um einen vermuteten Fehler mit dem Mvc3AppConverter aufgrund von Projektpositionen zu beheben).
Obwohl die Lösung kompiliert wurde, nachdem alle * Projektreferenzen nach Bedarf erneut hinzugefügt wurden, wurde der Fehler beim Starten der Website ausgelöst.
Der EDMX befindet sich in einem der Projekte, die verschoben wurden (das 'Daten'-Projekt), aber das Fehlen eines Verweises auf das Datenprojekt verursachte natürlich keinen Kompilierungsfehler, sondern nur einen Laufzeitfehler.
Durch einfaches Hinzufügen des fehlenden Verweises zum primären Projekt wurde dieses Problem behoben, sodass die Verbindung überhaupt nicht bearbeitet werden musste.
Ich hoffe das hilft jemand anderem.
quelle
Ich hatte die Datenzugriffsschicht und die Benutzerschnittstellenschicht getrennt. Ich habe also eine Entitätsverbindungszeichenfolge für jede Schicht.
Bevor ich diese beiden getrennten Verbindungszeichenfolgen so ändere, dass sie gleich sind, habe ich den folgenden Fehler immer noch festgestellt.
Also mache ich die gleichen Verbindungszeichenfolgen für diese beiden Ebenen (DAL, UI). Es funktioniert perfekt.
Meine Lösung besteht darin, alle Verbindungszeichenfolgen gleich zu machen, unabhängig davon, wo sie bereits dargestellt wurden .
quelle
Ich hatte gestern dieses Problem und habe mir meinen Code im Debug und die Ausgabe von SQL Profiler angesehen.
Was ich nicht verstehen konnte, bevor ich diesen Beitrag gelesen und verstanden habe, war, warum EntityFramework diesen Fehler beim Aufrufen der Datenbank auslöste. Ich habe Hunderte von Zeilen in SQL Profiler durchgesehen, um herauszufinden, was mit dem Datenbankmodell nicht stimmte. Ich konnte so etwas wie den erwarteten Anruf nicht finden, und um ehrlich zu sein, war ich mir nicht sicher, wonach ich suchte.
Wenn Sie sich in dieser Position befinden, überprüfen Sie die Verbindungszeichenfolge. Ich vermute, dass EntityFramework, bevor es seine SQL erstellt, das Modell überprüft, das im Metadatenteil der Verbindungszeichenfolge angegeben ist. In meinem Fall war es falsch. EntityFramework schaffte es nicht einmal bis zur DB.
Stellen Sie sicher, dass die Namen korrekt sind. Nachdem ich das geklärt hatte, sah ich Aufrufe in SQL Profiler, bei denen der Anwendungsname 'EntityFramework' war und SQL die erwarteten Tabellen aufrief.
quelle
Eine schlechte app.config- oder web.config-Datei kann dies tun. Ich habe die Verbindungszeichenfolge app.config in meine web.config in meiner Benutzeroberfläche kopiert und am Ende Folgendes eingegeben:
quelle