Partager via


Chaînes de connexion dans ADO.NET Entity Framework

Une chaîne de connexion contient des informations d'initialisation qui sont passées en tant que paramètre d'un fournisseur de données à une source de données. La syntaxe dépend du fournisseur de données et la chaîne de connexion est analysée lors de la tentative d'ouverture d'une connexion. Les chaînes de connexion utilisées par Entity Framework contiennent des informations utilisées pour la connexion au fournisseur de données ADO.NET sous-jacent qui prend en charge Entity Framework. Elles contiennent également des informations sur les fichiers de modèle et de mappage requis.

La chaîne de connexion est utilisée par le fournisseur EntityClient lors de l'accès aux métadonnées de modèle et de mappage et de la connexion à la source de données. Il est possible d'accéder à cette chaîne ou de la définir via la propriété ConnectionString de EntityConnection. La classe EntityConnectionStringBuilder peut être utilisée pour construire par programme des paramètres dans la chaîne de connexion ou y accéder par programme. Pour plus d’informations, consultez Procédure : générer une chaîne de connexion EntityConnection.

Les outils Entity Data Model génèrent une chaîne de connexion qui est stockée dans le fichier de configuration de l'application. ObjectContext récupère automatiquement ces informations de connexion lors de la création de requêtes d'objet. Il est possible d'accéder au EntityConnection utilisé par une instance de ObjectContext à partir de la propriété Connection. Pour plus d’informations, consultez Gestion des connexions et des transactions.

Syntaxe des chaînes de connexion

Pour en savoir plus sur la syntaxe générale des chaînes de connexion, consultez Syntaxe des chaînes de connexion | Chaînes de connexion dans ADO.NET.

Paramètres de chaîne de connexion

Le tableau suivant répertorie les noms valides pour les valeurs de mots clés dans la propriété ConnectionString.

Mot clé Description
Provider Obligatoire si le mot clé Name n'est pas spécifié. Nom du fournisseur, utilisé pour récupérer l'objet DbProviderFactory du fournisseur sous-jacent. Cette valeur est constante.

Lorsque le mot clé Name n'est pas inclus dans une chaîne de connexion de l'entité, une valeur non vide pour le mot clé Provider est requise. Ce mot clé et le mot clé Name s'excluent mutuellement.
Provider Connection String Optionnel. Spécifie la chaîne de connexion spécifique au fournisseur passée à la source de données sous-jacente. Cette chaîne de connexion contient des paires mot clé/valeur valides pour le fournisseur de données. Un mot clé Provider Connection String non valide provoque une erreur d'exécution lors de son évaluation par la source de données.

Ce mot clé et le mot clé Name s'excluent mutuellement.

Veillez à placer dans une séquence d’échappement la valeur en fonction de la syntaxe générale de chaînes de connexion ADO.NET. Prenons l’exemple de la chaîne de connexion suivante : Server=serverName; User ID = userID. Il doit être placé dans une séquence d’échappement, car il contient un point-virgule. Étant donné qu’il ne contient pas de guillemets doubles, ils peuvent être utilisés pour créer une séquence d'échappement :

Provider Connection String ="Server=serverName; User ID = userID";
Metadata Obligatoire si le mot clé Name n'est pas spécifié. Liste de répertoires, de fichiers et d'emplacements de ressources délimités par des barres verticales (|) où rechercher les métadonnées et les informations de mappage. Par exemple :

Metadata=

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

Les espaces situés de part et d'autre de la barre verticale sont ignorés.

Ce mot clé et le mot clé Name s'excluent mutuellement.
Name L'application peut éventuellement spécifier le nom de la connexion dans un fichier de configuration d'application qui fournit les valeurs de chaîne de connexion mot clé/valeur requises. Dans ce cas, vous ne pouvez pas les fournir directement dans la chaîne de connexion. Le mot clé Name n'est pas autorisé dans un fichier de configuration.

Lorsque le mot clé Name n'est pas inclus dans la chaîne de connexion, des valeurs non vides pour le mot clé Provider sont requises.

Ce mot clé est incompatible avec tous les autres mots clés de chaîne de connexion, et inversement.

Voici un exemple de chaîne de connexion pour le modèle de vente AdventureWorks Sales Model stocké dans le fichier de configuration de l'application :

Emplacement des fichiers de modèle et de mappage

Le paramètre Metadata contient une liste d'emplacements dans lesquels le fournisseur EntityClient va rechercher les fichiers de modèle et de mappage. Les fichiers de modèle et de mappage sont souvent déployés dans le même répertoire que le fichier exécutable de l'application. Ces fichiers peuvent être déployés également dans un emplacement spécifique ou inclus en tant que ressource incorporée dans l'application.

Les ressources incorporées sont spécifiées comme suit :

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

Les options suivantes permettent de définir l'emplacement d'une ressource incorporée :

Option Description
assemblyFullName Nom complet d'un assembly avec la ressource incorporée. Ce nom inclut le nom simple, le nom de la version, la culture prise en charge et la clé publique, comme suit :

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

Il est possible d'incorporer des ressources dans n'importe quel assembly accessible par l'application.

Si vous spécifiez un caractère générique (*) pour assemblyFullName, le runtime Entity Framework recherche des ressources dans les emplacements suivants, dans cet ordre :

1. L'assembly appelant.
2. Les assemblys référencés.
3. Les assemblys situés dans le répertoire bin d'une application.

Si les fichiers ne se trouvent pas dans l'un de ces emplacements, une exception est levée. Remarque : Lorsque vous utilisez un caractère générique (*), Entity Framework doit rechercher les ressources portant le nom correct dans tous les assemblys. Pour améliorer les performances, spécifiez le nom de l'assembly plutôt que le caractère générique.
resourceName Nom de la ressource incluse, par exemple AdvendtureWorksModel.csdl. Les services de métadonnées ne recherchent que les fichiers ou les ressources ayant l’une des extensions suivantes : .csdl, .ssdl, or .msl. Si resourceName n'est pas spécifié, toutes les ressources de métadonnées sont chargées. Les ressources doivent avoir des noms uniques dans un assembly. Si plusieurs fichiers portant le même nom sont définis dans différents répertoires de l’assembly, l’option resourceName doit inclure la structure de dossiers avant le nom de la ressource, par exemple NomDossier.NomFichier.csdl.

resourceName n'est pas requis lorsque vous spécifiez un caractère générique (*) pour assemblyFullName.

Notes

Pour améliorer les performances, incorporez les ressources dans l'assembly appelant, excepté dans les scénarios non Web dans lesquels il n'y a aucune référence aux fichiers de mappage et de métadonnées sous-jacents dans l'assembly appelant.

L'exemple suivant charge tous les fichiers de modèle et de mappage de l'assembly appelant, des assemblys référencés et des autres assemblys situés dans le répertoire bin d'une application.

Metadata=res://*/

L'exemple suivant charge le fichier model.csdl à partir de l'assembly AdventureWorks, et charge les fichiers model.ssdl et model.msl à partir du répertoire par défaut de l'application en cours d'exécution.

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

L'exemple suivant charge les trois ressources spécifiées à partir de l'assembly spécifique.

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

L'exemple suivant charge toutes les ressources incorporées ayant les extensions .csdl, .msl et .ssdl à partir de l'assembly.

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

L'exemple suivant charge toutes les ressources se trouvant dans le chemin d'accès relatif plus « datadir\metadata\ » à partir de l'emplacement de l'assembly chargé.

Metadata=datadir\metadata\

L’exemple suivant charge toutes les ressources se trouvant dans le chemin d’accès relatif à partir de l’emplacement de l’assembly chargé.

Metadata=.\

Prise en charge de la chaîne de substitution |DataDirectory| et de l'opérateur de racine de l'application Web (~)

DataDirectory et l'opérateur ~ sont utilisés dans la propriété ConnectionString en tant que partie intégrante des mots clés Metadata et Provider Connection String. L'objet EntityConnection transfère le répertoire DataDirectory et l'opérateur ~ à l'objet MetadataWorkspace et au fournisseur de magasins, respectivement.

Terme Description
&#124;DataDirectory&#124; Correspond à un chemin d’accès relatif aux fichiers de mappage et de métadonnées. Il s'agit de la valeur définie via la méthode AppDomain.SetData("DataDirectory", objValue). La chaîne de substitution DataDirectory doit être placée entre des barres verticales et il ne doit y avoir aucun espace entre son nom et les barres verticales. Le nom DataDirectory ne respecte pas la casse.

Si un répertoire physique nommé « DataDirectory » doit être transmis en tant que membre de la liste des chemins d’accès aux métadonnées, ajoutez un espace soit avant ou après le nom, soit de chaque côté. Par exemple : Metadata="DataDirectory1 &#124; DataDirectory &#124; DataDirectory2". Une application ASP.NET fait correspondre |DataDirectory| au dossier « <racine de l’application>/app_data ».
~ Correspond à la racine de l'application Web. Le caractère ~ placé en première position est toujours interprété comme l'opérateur de racine de l'application Web (~), même s'il peut représenter un sous-répertoire local valide. Pour faire référence à un tel sous-répertoire local, l'utilisateur doit passer explicitement ./~.

DataDirectory et l'opérateur ~ doivent être spécifiés uniquement au début d'un chemin d'accès ; ils ne sont pas résolus s'ils se trouvent à toute autre position. Entity Framework essaiera de résoudre ~/data, mais il traitera /data/~ comme un chemin d'accès physique.

Un chemin d'accès qui commence par le DataDirectory ou par l'opérateur ~ ne peut pas correspondre à un chemin d'accès physique à l'extérieur de la branche du DataDirectory et de l'opérateur ~. Par exemple, les chemins d’accès suivants seront résolus : ~ , ~/data , ~/bin/Model/SqlServer. Les chemins d’accès suivants ne seront pas résolus : ~/.., ~/../other.

DataDirectory et l'opérateur ~ peuvent être étendus pour inclure des sous-répertoires, comme suit : |DataDirectory|\Model, ~/bin/Model

La résolution de la chaîne de substitution DataDirectory et de l’opérateur ~ est non récursive. Par exemple, lorsque DataDirectory inclut le caractère ~, une exception se produit. Cela empêche une récurrence infinie.

Voir aussi