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.

3voto

صفي Punkte 1038

Mit dem gleichen Problem habe ich edmx aus der Datenbank neu erstellt. Das löst mein Problem.

2 Stimmen

Leider wird damit nur das Symptom und nicht die Ursache behandelt.

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.

3voto

lau Punkte 372

Ich habe diese Hilfsklasse geschrieben, um Instanzen von ObjectContext-Objekten zu erstellen, wenn diese in einem anderen Projekt definiert sind als das Projekt, das sie verwendet. Ich analysiere die Verbindungszeichenfolge in der Konfigurationsdatei und ersetze "*" durch den vollständigen Assembly-Namen.

Es ist nicht perfekt, weil es Reflexion verwendet, um das Objekt zu bauen, aber es ist die allgemeinste Art, es zu tun, die ich finden konnte.

Ich hoffe, es hilft jemandem.

public static class EntityHelper<T> where T : ObjectContext
{
    public static T CreateInstance()
    {
        // get the connection string from config file
        string connectionString = ConfigurationManager.ConnectionStrings[typeof(T).Name].ConnectionString;

        // parse the connection string
        var csBuilder = new EntityConnectionStringBuilder(connectionString);

        // replace * by the full name of the containing assembly
        csBuilder.Metadata = csBuilder.Metadata.Replace(
            "res://*/",
            string.Format("res://{0}/", typeof(T).Assembly.FullName));

        // return the object
        return Activator.CreateInstance(typeof(T), csBuilder.ToString()) as T;
    }
}

2voto

Antoine Meltzheim Punkte 9047

Ich hatte dasselbe Problem, weil ich eine Baugruppe umbenannt habe.

Ich musste sie auch in den Attributen AssemblyTitle und AssemblyProduct im Projekt Properties/AssemblyInfo.cs umbenennen und auch den Verweis auf die edmx-Datei löschen und neu hinzufügen.

Dann funktionierte es einwandfrei.

2voto

Adam Punkte 21

Ich hatte Probleme mit der gleichen Fehlermeldung. Mein Problem wurde durch Schließen und erneutes Öffnen von Visual Studio 2010 behoben.

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