Diese Ausnahme kann auftreten, wenn sich Edmx in einem Projekt befindet und Sie es in einem anderen Projekt verwenden.
Der Grund dafür ist Res://*/
ist eine Uri, die auf Ressourcen in der AKTUELLEN Baugruppe verweist. Wenn der Edm in einer anderen Assembly definiert ist als in dem Code, 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). Beispiel:
res://YourDataAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdefabcedf/YourEdmxFileName.csdl|res://...
Eine bessere Möglichkeit, Verbindungszeichenfolgen zu konstruieren, ist der EntityConnectionStringBuilder:
public static string GetSqlCeConnectionString(string fileName)
{
var csBuilder = new EntityConnectionStringBuilder();
csBuilder.Provider = "System.Data.SqlServerCe.3.5";
csBuilder.ProviderConnectionString = string.Format("Data Source={0};", fileName);
csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl",
typeof(YourObjectContextType).Assembly.FullName);
return csBuilder.ToString();
}
public static string GetSqlConnectionString(string serverName, string databaseName)
{
SqlConnectionStringBuilder providerCs = new SqlConnectionStringBuilder();
providerCs.DataSource = serverName;
providerCs.InitialCatalog = databaseName;
providerCs.IntegratedSecurity = true;
var csBuilder = new EntityConnectionStringBuilder();
csBuilder.Provider = "System.Data.SqlClient";
csBuilder.ProviderConnectionString = providerCs.ToString();
csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl",
typeof(YourObjectContextType).Assembly.FullName);
return csBuilder.ToString();
}
Wenn die Ausnahme weiterhin auftritt, öffnen Sie die Assembly in Reflector und überprüfen Sie die Dateinamen Ihrer .csdl-, .ssdl- und .msl-Dateien. Wenn die Ressourcen andere Namen haben als die, die im Metadatenwert angegeben sind, wird es nicht funktionieren.
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.
1 Stimmen
Der Marquis de Sade ist lebendig und arbeitet bei Microsoft. Das ist wirklich die Entity Framework-Hölle.
0 Stimmen
Siehe den Kommentar unter der akzeptierten Antwort. Letztendlich war es nichts anderes als ein falscher Verbindungsstring.
0 Stimmen
Ich hatte den gleichen Fehler (und viele Hänger) anscheinend "aus heiterem Himmel" mit VS2022. Ich habe den PC neu gestartet. Ich habe die EDMX-Verbindungszeichenfolge/Einstellungen gemäß @Craig Stuntz (eine der Antworten unten) und andere we.config-Einstellungen verglichen und überprüft - immer noch kein Erfolg. Ich habe VS2022 im SAFE MODE gestartet:
devenv /SafeMode
Die Lösung ließ sich nicht ausführen (nicht alle Projekte wurden geladen - die Gründe sind in der "Ausgabe" angegeben), aber nach dem normalen Öffnen von VS2022 (ohne irgendwelche Änderungen vorzunehmen) war das Problem verschwunden. Alles funktionierte wieder. Es ist auf jeden Fall einen Versuch wert, im abgesicherten Modus zu öffnen.