Поделиться через


Строки подключения в ADO.NET Entity Framework

Строка подключения содержит сведения для инициализации, передаваемые в виде параметра от поставщика данных в источник данных. Синтаксис зависит от поставщика данных, и при попытке открыть соединение строка соединения анализируется. Строки соединения платформы Entity Framework содержат сведения, которые используются для соединения с базовым поставщиком данных ADO.NET, поддерживающим Entity Framework. Они также содержат сведения о необходимых файлах модели и сопоставления.

Строка соединения используется поставщиком EntityClient для доступа к метаданным модели и сопоставления, а также для соединения с источником данных. Свойство ConnectionString объекта EntityConnection позволяет получить доступ к строке соединения или задать ее значение. Класс EntityConnectionStringBuilder может использоваться для построения или обработки программным путем параметров строки соединения.

Средства модели данных сущности создают строка подключения, хранящиеся в файле конфигурации приложения. ObjectContext автоматически извлекает сведения о соединении при создании запросов объекта. Доступ к соединению EntityConnection, используемому экземпляром ObjectContext, можно получить с помощью свойства Connection.

Синтаксис строки подключения

Общие сведения о синтаксисе строка подключения см. в разделе "Синтаксис строки подключения" | Строки подключения в ADO.NET.

Параметры строки соединения

В следующей таблице перечислены допустимые имена для значений ключевых слов в строке соединения ConnectionString.

Ключевое слово Description
Provider Необходимо, если не задано ключевое слово Name. Имя поставщика, которое используется для получения объекта DbProviderFactory, относящегося к базовому поставщику. Это - постоянное значение.

Если в строке соединения сущности не содержится ключевое слово Name, то необходимо задать непустое значение для ключевого слова Provider. Это ключевое слово является взаимоисключающим по отношению к ключевому слову Name.
Provider Connection String Необязательно. Указывает зависящую от поставщика строку соединения, которая передается в базовый источник данных. Эта строка подключения содержит допустимые пары ключевых слов и значений для поставщика данных. Применение недопустимого ключевого слова Provider Connection String приводит к возникновению ошибки времени выполнения при его проверке в источнике данных.

Это ключевое слово является взаимоисключающим по отношению к ключевому слову Name.

Не забудьте избежать значения в соответствии с общим синтаксисом ADO.NET строка подключения. Рассмотрим, например, следующие строка подключения: Server=serverName; User ID = userID Он должен быть экранирован, так как он содержит точку с запятой. Так как он не содержит двойные кавычки, они могут использоваться для экранирования:

Provider Connection String ="Server=serverName; User ID = userID";
Metadata Необходимо, если не задано ключевое слово Name. Список каталогов, файлов и расположений ресурсов с разделителями в виде вертикальной черты (|), в которых будет выполняться поиск сведений о метаданных и сопоставлениях. Ниже приведен пример:

Metadata=

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

Пустые пространства, расположенные с обеих сторон вертикальной черты (|), не учитываются.

Это ключевое слово является взаимоисключающим по отношению к ключевому слову Name.
Name По желанию можно определить имя соединения в файле конфигурации приложения, в котором предоставляются необходимые для строки соединения пары «ключевое слово/значение». В этом случае нельзя задавать эти пары непосредственно в строке соединения. Применение ключевого слова Name в файле конфигурации не допускается.

Если в строке соединения не содержится ключевое слово Name, то необходимо задать непустые значения для ключевого слова Provider.

Это ключевое слово является взаимоисключающим по отношению к другим ключевым словам строки соединения.

Расположение файла модели и сопоставления

Параметр Metadata содержит список местоположений, в которых поставщик EntityClient выполняет поиск файлов модели и сопоставления. Файлы модели и сопоставления часто развертываются в том же каталоге, что и исполняемый файл приложения. Эти файлы могут быть также развернуты в конкретном местоположении или включены в виде внедренного ресурса в приложение.

Внедренные ресурсы задаются следующим образом:

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

Для определения расположения внедренного ресурса доступны следующие способы.

Вариант Описание
assemblyFullName Полное имя сборки с внедренным ресурсом. Это имя включает простое имя, имя версии, поддерживаемую культуру и открытый ключ следующим образом:

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

Ресурсы можно внедрять в любую сборку, доступную для приложения.

Если указать подстановочный знак (*) для assemblyFullName, среда выполнения Entity Framework будет искать ресурсы в следующих расположениях в следующем порядке:

1. Вызываемая сборка.
2. Ссылочные сборки.
3. Сборки в каталоге bin приложения.

Если файлы не найдены ни в одном из этих расположений, вызывается исключение. Примечание. При использовании подстановочного знака (*) Entity Framework необходимо просмотреть все сборки для ресурсов с правильным именем. В целях повышения производительности задавайте имя сборки, а не символ-шаблон.
resourceName Имя включенного ресурса, например AdventureWorksModel.csdl. Службы метаданных осуществляют поиск файлов или ресурсов только для расширений CSDL, SSDL и MSL. Если имя resourceName не указано, то загружаются все ресурсы метаданных. Ресурсы должны иметь в сборке уникальные имена. Если в сборке в разных каталогах указано несколько файлов с одинаковыми именами, то в resourceName перед именем ресурса должна быть представлена структура папок, например ИмяПапки.ИмяФайла.csdl.

Указание resourceName не требуется, если для assemblyFullName задан символ-шаблон (*).

Примечание.

В целях повышения производительности рекомендуется внедрять ресурсы в вызывающую сборку с учетом того, что в приложениях, отличных от веб-приложений, такая рекомендация становится неприменимой, поскольку в вызывающей сборке отсутствуют ссылки на файлы сопоставлений и метаданных.

В следующем примере загружаются все файлы модели и сопоставления из вызывающей сборки, а также сборок, указанных в ссылках, и других сборок в каталоге bin приложения.

Metadata=res://*/

В следующем примере загружаются файл model.csdl из сборки AdventureWorks, а также файлы model.ssdl и model.msl из каталога по умолчанию выполняющегося приложения.

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

В следующем примере загружаются три заданных ресурса из указанной сборки.

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

В следующем примере из сборки загружаются все внедренные ресурсы с расширениями CSDL, SSDL и MSL.

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

В следующем примере загружаются все ресурсы в относительном пути к файлу и "datadir\metadata\" из загруженной сборки.

Metadata=datadir\metadata\

В следующем примере из расположения загруженной сборки загружаются все ресурсы, которые обозначены относительным путем к файлу.

Metadata=.\

Поддержка |DataDirectory| Строка подстановки и корневой оператор веб-приложения (~)

DataDirectory и оператор ~ используются в ConnectionString рамках Metadata ключевых слов и Provider Connection String ключевых слов. В соединении EntityConnection параметр DataDirectory и оператор ~ передаются MetadataWorkspace и поставщику хранилища соответственно.

Срок Description
&#124;DataDirectory&#124; Преобразуется в относительный путь к файлам сопоставлений и метаданных. Это значение определяется с помощью метода AppDomain.SetData("DataDirectory", objValue). Строка DataDirectory подстановки должна быть окружена символами канала и не может быть пробела между его именем и символами канала. Имя DataDirectory обрабатывается без учета регистра.

Если физический каталог с именем DataDirectory должен быть передан как член списка путей метаданных, добавьте пробел в обе стороны имени. Например: Metadata="DataDirectory1 &#124; DataDirectory &#124; DataDirectory2". Разрешение приложения ASP.NET |DataDirectory| в папку "<root>/app_data приложения".
~ Преобразуется в корневой каталог веб-приложения. Символ ~ в ведущей позиции всегда интерпретируется как оператор определения корневого каталога веб-приложения (~), хотя и может представлять допустимый локальный подкаталог. Для ссылки на локальный подкаталог пользователь должен явно передать ./~.

Значение DataDirectory и оператор ~ должны быть указаны только в начале пути, поскольку их преобразование в любой другой позиции не происходит. Платформа Entity Framework пытается преобразовать ~/data, но рассматривает /data/~ как физический путь.

Путь, начинающийся с DataDirectory или оператора ~, нельзя преобразовать в физический путь вне ветви DataDirectory и оператора ~. Например, следующие пути будут преобразованы так: ~ , ~/data, ~/bin/Model/SqlServer. Попытка преобразования следующих путей завершится ошибкой: ~/.., ~/../other.

DataDirectory и оператор «~» могут включать подкаталоги: |DataDirectory|\Model, ~/bin/Model.

Процесс разрешения строки подстановки DataDirectory и оператора ~ является нерекурсивным. Например, если DataDirectory включает символ ~, возникает исключение. Тем самым предотвращается бесконечная рекурсия.

См. также