Warum erfordert eine Entity Framework-Verbindung eine Metadateneigenschaft?

connection connection-string data-access-layer database entity-framework

Frage

Ich habe meine DAL von LINQ auf Entity Framework umgestellt. Da meine Anwendung abhängig vom aktuellen Benutzer eine Verbindung zu verschiedenen Datenbanken herstellt, muss ich zur Laufzeit dynamisch den DataContext erstellen und die entsprechende Verbindungszeichenfolge übergeben. Als ich jedoch versuchte, eine Entity Framework-Verbindung mit meiner alten Verbindungszeichenfolge programmatisch zu erstellen, schlug die Verbindung fehl. Sie beklagte sich darüber, dass sie den Schlüssel in der Verbindungszeichenfolge "Server" nicht erkannt habe, um genau zu sein.

Ich fand heraus, dass ich dies tun musste, um die Entity Framework-Verbindung zum Laufen zu bringen:

EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Provider = "System.Data.SqlClient";
entityBuilder.ProviderConnectionString = clientConnectionString;
entityBuilder.Metadata = "res://*/xxxxxxxxxx.csdl...";
Entities entities = new Entities(entityBuilder.ToString());

Warum ist das?
Wozu dient die Metadaten-Eigenschaft?
Ist es ein Problem, dass es für mehrere verschiedene Verbindungen immer gleich ist?
Was soll es sein
Gibt es einen Weg, um das zu umgehen?

Danke im Voraus!

Update 1: Danke für das Update Randolpho, aber ...
Der ganze Grund, warum ich dieses Problem habe, ist, dass ich die Verbindungszeichenfolgen nicht in einer Konfigurationsdatei speichern kann. Die Verbindungszeichenfolge wird zur Laufzeit dynamisch durch den Benutzer bestimmt.

Hier ist mein genaues Szenario:
Wenn Benutzer A eine Verbindung herstellt, holt die App Daten aus Datenbank A. Wenn Benutzer B eine Verbindung herstellt, holt die App Daten aus Datenbank B.
Die Verbindungszeichenfolgen werden in einer Hauptdatenbank gespeichert und die Anzahl ist potenziell unbegrenzt. Jedes Mal, wenn ich einen Benutzer hinzufüge, möchte ich nicht in die web.config gehen, ganz zu schweigen von der Tatsache, dass es letztendlich RIESIG wird!

Akzeptierte Antwort

Sie finden diese Links sehr informativ:

http://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnection.connectionstring.aspx

http://weblogs.asp.net/pgielens/archive/2006/08/21/ADO.NET-Entity-Framework-Metadata.aspx

Endeffekt? Entity Framework benötigt die Metadaten zum Erstellen Ihrer Entitätszuordnungen.

Darüber hinaus sollten Sie erwägen, Ihre Verbindungsinformationen in die Konfigurationsdatei zu verschieben, anstatt sie in Code zu integrieren. Der erste Link zeigt Ihnen, wie das geht.


Beliebte Antwort

Erweiterung auf Randolphos Antwort:

Die Metadaten-Eigenschaft verweist speziell auf den Speicherort der .SSDL-Dateien (Storage Model,) .CSDL (Conceptual Model) und der .MSL-Dateien (Mapping Model). Diese drei Dateien sind im Wesentlichen das Entitätsdatenmodell. Das URI-Qualifikationsmerkmal "res: //" gibt an, dass die Dateien als Ressourcen in die kompilierte EDM-Assembly eingebettet sind.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum