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


Строки соединения (платформа Entity Framework)

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

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

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

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

Формат строки соединения является списком разделенных точкой с запятой пар параметров «ключ-значение»:

keyword1=value; keyword2=value;

Знак равенства (=) соединяет каждое ключевое слово и его значение. Ключевые слова не учитывают регистр, и пробелы между парами «ключ-значение» не учитываются. Однако в значениях может учитываться регистр в зависимости от источника данных. Любые значения, содержащие точки с запятой, одинарные кавычки или двойные кавычки, должны быть заключены в двойные кавычки. В следующей таблице перечислены допустимые имена для значений ключевых слов в строке соединения ConnectionString.

Ключевое слово Описание

Provider

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

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

Provider Connection String

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

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

Значение Provider Connection String должно быть заключено в кавычки. Ниже приведен один из примеров:

Provider Connection String ="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.

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

В следующем примере показана строка соединения для модели AdventureWorks Sales, хранящаяся в файле конфигурации приложения:

<connectionStrings>
    <add name="AdventureWorksEntities" 
         connectionString="metadata=.\AdventureWorks.csdl|.\AdventureWorks.ssdl|.\AdventureWorks.msl;
         provider=System.Data.SqlClient;provider connection string='Data Source=localhost;
         Initial Catalog=AdventureWorks;Integrated Security=True;Connection Timeout=60;
         multipleactiveresultsets=true'" providerName="System.Data.EntityClient" />
</connectionStrings>

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

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

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

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

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

Параметр

Описание

assemblyFullName

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

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

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

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

  1. вызывающая сборка;

  2. сборки, на которые имеются ссылки;

  3. сборки в каталоге исполняемых файлов (bin) приложения.

Если файлы не найдены ни в одном из этих расположений, вызывается исключение.

Cc716756.note(ru-ru,VS.100).gifПримечание
Если используется символ-шаблон (*), то платформа Entity Framework должна обеспечить поиск во всех сборках ресурсов с подходящим именем.В целях повышения производительности задавайте имя сборки, а не символ-шаблон.

resourceName

Имена включенных ресурсов, например AdvendtureWorksModel.csdl. Службы метаданных осуществляют поиск файлов или ресурсов только для расширений CSDL, SSDL и MSL. Если имя resourceName не указано, то загружаются все ресурсы метаданных. Ресурсы должны иметь в сборке уникальные имена. Если в сборке в разных каталогах указано несколько файлов с одинаковыми именами, то в resourceName перед именем ресурса должна быть представлена структура папок, например ИмяПапки.ИмяФайла.csdl.

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

Cc716756.note(ru-ru,VS.100).gifПримечание
В целях повышения производительности рекомендуется внедрять ресурсы в вызывающую сборку с учетом того, что в приложениях, отличных от веб-приложений, такая рекомендация становится неприменимой, поскольку в вызывающей сборке отсутствуют ссылки на файлы сопоставлений и метаданных.

В следующем примере загружаются все файлы модели и сопоставления из вызывающей сборки, а также сборок, указанных в ссылках, и других сборок в каталоге 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 и поставщику хранилища соответственно.

Термин Описание

|DataDirectory|

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

Если в списке путей метаданных нужно передать имя физического каталога «DataDirectory», то добавьте пробелы с обеих сторон от имени, например: Metadata="DataDirectory1 | DataDirectory | DataDirectory2". Приложение ASP.NET преобразовывает значение |DataDirectory| в обозначение папки «<корневой каталог приложения>/app_data».

~

Преобразуется в корневой каталог веб-приложения. Символ ~ в ведущей позиции всегда интерпретируется как оператор определения корневого каталога веб-приложения (~), хотя и может представлять допустимый локальный подкаталог. Для ссылки на локальный подкаталог пользователь должен явно передать ./~.

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

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

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

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

См. также

Основные понятия

Вопросы развертывания (платформа Entity Framework)
Управление соединениями и транзакциями (платформа Entity Framework)

Другие ресурсы

Работа с поставщиками данных (платформа Entity Framework)
Connection Strings (ADO.NET)