Verbindungszeichenfolgen im ADO.NET Entity Framework

Eine Verbindungszeichenfolge enthält Initialisierungsinformationen, die als Parameter von einem Datenanbieter an eine Datenquelle übergeben werden. Die Syntax ist abhängig vom Datenanbieter, und die Verbindungszeichenfolge wird beim Versuch analysiert, eine Verbindung herzustellen. Von Entity Framework verwendete Verbindungszeichenfolgen enthalten Informationen zum Herstellen einer Verbindung mit dem zugrunde liegenden ADO.NET-Datenanbieter, der Entity Framework unterstützt. Sie enthalten auch Informationen zu den erforderlichen Modell- und Zuordnungsdateien.

Der EntityClient-Anbieter verwendet die Verbindungszeichenfolge für den Zugriff auf Modell- und Zuordnungsmetadaten sowie zum Herstellen einer Verbindung mit der Datenquelle. Mithilfe der ConnectionString-Eigenschaft der EntityConnection kann auf die Verbindungszeichenfolge zugegriffen und diese festgelegt werden. Mit der EntityConnectionStringBuilder-Klasse können Parameter in der Verbindungszeichenfolge programmgesteuert erstellt werden, sie ermöglicht auch den Zugriff auf diese Parameter.

Die Entity Data Model-Tools generieren eine Verbindungszeichenfolge, die in der Konfigurationsdatei der Anwendung gespeichert wird. ObjectContext ruft diese Verbindungsinformationen beim Erstellen von Objektabfragen automatisch ab. Auf die EntityConnection, die von einer ObjectContext-Instanz verwendet wird, kann von der Connection-Eigenschaft aus zugegriffen werden.

Verbindungszeichenfolgen-Syntax

Informationen zur allgemeinen Syntax für Verbindungszeichenfolgen finden Sie unter Verbindungszeichenfolgensyntax | Verbindungszeichenfolgen in ADO.NET.

Parameter der Verbindungszeichenfolge

Die folgende Tabelle enthält die gültigen Namen für Schlüsselwortwerte im ConnectionString.

Schlüsselwort Beschreibung
Provider Erforderlich, wenn das Schlüsselwort Name nicht angegeben ist. Der Anbietername, mit dem das DbProviderFactory-Objekt für den zugrunde liegenden Anbieter abgerufen wird. Dieser Wert ist konstant.

Wenn in einer Entitätsverbindungszeichenfolge nicht das Schlüsselwort Name eingefügt wurde, ist für das Schlüsselwort Provider ein nicht leerer Wert erforderlich. Dieses Schlüsselwort und das Schlüsselwort Name schließen sich gegenseitig aus.
Provider Connection String Dies ist optional. Gibt die anbieterspezifische Verbindungszeichenfolge an, die an die zugrunde liegende Datenquelle übergeben wird. Diese Verbindungszeichenfolge enthält gültige Schlüsselwort-Wert-Paare für den Datenanbieter. Eine ungültige Provider Connection String löst bei der Auswertung durch die Datenquelle einen Laufzeitfehler aus.

Dieses Schlüsselwort und das Schlüsselwort Name schließen sich gegenseitig aus.

Stellen Sie sicher, dass Sie den Wert gemäß der allgemeinen Syntax von ADO.NET-Verbindungszeichenfolgen mit Escapezeichen versehen. Betrachten Sie beispielsweise die folgende Verbindungszeichenfolge: Server=serverName; User ID = userID. Sie muss mit Escapezeichen versehen werden, da sie ein Semikolon enthält. Da sie keine doppelten Anführungszeichen enthält, können sie zum Escapen verwendet werden:

Provider Connection String ="Server=serverName; User ID = userID";
Metadata Erforderlich, wenn das Schlüsselwort Name nicht angegeben ist. Eine durch senkrechte Striche getrennte Liste von Verzeichnissen, Dateien und Ressourcenspeicherorten, die nach Metadaten und Mappinginformationen durchsucht werden sollen. Es folgt ein Beispiel:

Metadata=

c:\model | c:\model\sql\mapping.msl;

Leerzeichen zu beiden Seiten des senkrechten Strichs werden ignoriert.

Dieses Schlüsselwort und das Schlüsselwort Name schließen sich gegenseitig aus.
Name Der Verbindungsname kann von der Anwendung optional in einer Anwendungskonfigurationsdatei angegeben werden, die die erforderlichen Verbindungszeichenfolgen-Werte mit den Schlüsselwort-Wert-Paaren enthält. In diesem Fall können diese nicht direkt in der Verbindungszeichenfolge bereitgestellt werden. Das Schlüsselwort Name ist in einer Konfigurationsdatei nicht zulässig.

Wenn das Schlüsselwort Name in der Verbindungszeichenfolge nicht eingefügt wurde, ist für das Provider-Schlüsselwort ein nicht leerer Wert erforderlich.

Dieses Schlüsselwort und alle anderen Schlüsselwörter für Verbindungszeichenfolgen schließen sich gegenseitig aus.

Modell- und Zuordnungsdateispeicherorte

Der Metadata-Parameter enthält eine Liste mit Speicherorten, an denen der EntityClient-Anbieter nach Modell- und Zuordnungsdateien suchen kann. Modell- und Zuordnungsdateien werden häufig im Verzeichnis der ausführbaren Anwendungsdatei bereitgestellt. Diese Dateien können auch in einem anderen Speicherort oder als eingebettete Ressource in der Anwendung bereitgestellt werden.

Eingebettete Ressourcen werden wie folgt angegeben:

Metadata=res://<assemblyFullName>/<resourceName>

Mit den folgenden Optionen kann der Speicherort einer eingebetteten Ressource festgelegt werden:

Option BESCHREIBUNG
assemblyFullName Der vollständige Name einer Assembly mit der eingebetteten Ressource. Der Name besteht wie folgt aus dem einfachen Namen, dem Versionsnamen, der unterstützten Kultur und dem öffentlichen Schlüssel:

ResourceLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

Ressourcen können in jede Assembly eingebettet werden, auf die von der Anwendung zugegriffen werden kann.

Wenn Sie für assemblyFullName einen Platzhalter (*) angeben, sucht die Entity Framework-Runtime an folgenden Speicherorten und in dieser Reihenfolge nach Ressourcen:

1. Die aufrufende Assembly.
2. Die Assemblys, auf die verwiesen wird.
3. Die Assemblys im Verzeichnis „bin“ einer Anwendung.

Wenn sich die Dateien nicht in einem dieser Speicherorte befinden, wird eine Ausnahme ausgelöst. Hinweis: Wenn Sie Platzhalter verwenden (*), sucht Entity Framework in allen Assemblys nach Ressourcen mit dem richtigen Namen. Wenn anstelle des Platzhalters der Assemblyname eingegeben wird, verbessert sich die Suchleistung.
resourceName Der Name der enthaltenen Ressource, z. B. „AdventureWorksModel.csdl“. Die Metadatendienste suchen nur nach Dateien oder Ressourcen mit folgenden Erweiterungen: CSDL, SSDL oder MSL. Wenn resourceName nicht angegeben wurde, werden alle Metadatenressourcen geladen. Die Ressourcen sollten innerhalb einer Assembly eindeutige Namen haben. Wenn in der Assembly mehrere Dateien mit gleichem Namen in verschiedenen Verzeichnissen definiert sind, muss für den resourceName die Ordnerstruktur vor dem Ressourcennamen angegeben werden, z. B. FolderName.FileName.csdl.

resourceName ist nicht erforderlich, wenn für assemblyFullName ein Platzhalter (*) angegeben wird.

Hinweis

Die Leistung kann durch das Einbetten von Ressourcen in die aufrufende Assembly verbessert werden. In nicht webbasierten Szenarios, in denen innerhalb der aufrufenden Assembly keine Verweise auf zugrunde liegende Mapping- und Metadatendateien vorhanden sind, ist dies allerdings nicht möglich.

In folgendem Beispiel werden alle Modell- und Zuordnungsdateien in die aufrufende Assembly, in Assemblys, auf die verwiesen wird, und in andere Assemblys im BIN-Verzeichnis einer Anwendung geladen.

Metadata=res://*/

Im folgenden Beispiel werden die Datei model.csdl aus der AdventureWorks-Assembly sowie die Dateien model.ssdl und model.msl aus dem Standardverzeichnis der ausgeführten Anwendung geladen.

Metadata=res://AdventureWorks, 1.0.0.0, neutral, a14f3033def15840/model.csdl|model.ssdl|model.msl

Im folgenden Beispiel werden die drei festgelegten Ressourcen aus der angegebenen Assembly geladen.

Metadata=res://AdventureWorks, 1.0.0.0, neutral, a14f3033def15840/model.csdl|
res://AdventureWorks, 1.0.0.0, neutral, a14f3033def15840/model.ssdl|
res://AdventureWorks, 1.0.0.0, neutral, a14f3033def15840/model.msl

Im folgenden Beispiel werden alle eingebetteten CSDL-, MSL- und SSDL-Ressourcen aus der Assembly geladen.

Metadata=res://AdventureWorks, 1.0.0.0, neutral, a14f3033def15840/

Im folgenden Beispiel werden alle Ressourcen aus dem geladenen Assemblyspeicherort in den relativen Dateipfad, der um datadir\metadata\ erweitert wird, geladen.

Metadata=datadir\metadata\

Im folgenden Beispiel werden alle Ressourcen aus dem geladenen Assemblyspeicherort in den relativen Dateipfad geladen.

Metadata=.\

Unterstützung für die |DataDirectory|-Ersatzzeichenfolge und den Webanwendungsstamm-Operator (~)

DataDirectory und der ~-Operator werden in der ConnectionString als Teil der Schlüsselwörter Metadata und Provider Connection String verwendet. Die EntityConnection leitet den DataDirectory- und den ~-Operator an MetadataWorkspace bzw. den Speicheranbieter weiter.

Begriff BESCHREIBUNG
&#124;DataDirectory&#124; Löst den relativen Pfad in Zuordnungs- und Metadatendateien auf. Dies ist der Wert, der durch die AppDomain.SetData("DataDirectory", objValue)-Methode festgelegt wird. Die DataDirectory-Ersatzzeichenfolge muss von senkrechten Strichen (Pipezeichen) umgeben sein, und zwischen dem Namen und den senkrechten Strichen dürfen sich keine Leerzeichen befinden. Der DataDirectory-Name unterscheidet nicht zwischen Groß- und Kleinschreibung.

Wenn ein physisches Verzeichnis mit dem Namen „DataDirectory“ als Member der Liste mit Metadatenpfaden übergeben werden muss, fügen Sie am Anfang und/oder am Ende des Namens Leerzeichen hinzu. Beispiel: Metadata="DataDirectory1 &#124; DataDirectory &#124; DataDirectory2". Eine ASP.NET-Anwendung löst |DataDirectory| in den Ordner „<Anwendungsstamm>/app_data“ auf.
~ Löst zum Webanwendungsstamm auf. Wenn sich das Zeichen "~" am Anfang einer Zeichenfolge befindet, wird es stets als Stamm-Operator der Webanwendung (~) interpretiert, auch wenn es möglicherweise ein gültiges lokales Unterverzeichnis darstellt. Wenn auf solch ein lokales Unterverzeichnis verwiesen werden soll, sollte der Benutzer ./~ explizit übergeben.

DataDirectory und der ~-Operator sollten nur am Anfang eines Pfads festgelegt werden, da sie an anderen Positionen nicht aufgelöst werden. Entity Framework versucht, ~/data aufzulösen, behandelt /data/~ jedoch wie einen physischen Pfad.

Ein Pfad, der mit dem DataDirectory oder dem ~-Operator beginnt, kann nicht in einen physischen Pfad außerhalb der Struktur des DataDirectory und des ~-Operators aufgelöst werden. Diese Beispielpfade werden aufgelöst: ~, ~/data, ~/bin/Model/SqlServer. Diese Beispielpfade werden nicht aufgelöst: ~/.., ~/../other.

DataDirectory und der ~-Operator können wie folgt erweitert werden, um Unterverzeichnisse einzuschließen: |DataDirectory|\Model, ~/bin/Model

Die Auflösung der DataDirectory-Ersatzzeichenfolge und des ~-Operators ist nicht rekursiv. Wenn DataDirectory z. B. das ~-Zeichen enthält, tritt eine Ausnahme auf. Dies verhindert eine unendliche Rekursion.

Siehe auch