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


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

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

Строка соединения используется поставщиком EntityClient при доступе к сопоставлениям и метаданным модели EDM и соединении с источником данных. Свойство 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" />
    <add name="NorthwindEntities" connectionString="metadata=.\Northwind.csdl|.\Northwind.ssdl.\Northwind.msl;
         provider=System.Data.SqlClient;provider connection string='Data Source=localhost;
         Initial Catalog=Northwind;Integrated Security=True;MultipleActiveResultSets=True'" 
         providerName="System.Data.EntityClient" />
</connectionStrings>

Расположение сопоставлений и метаданных модели EDM

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

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

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

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

Способ

Описание

assemblyFullName

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

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

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

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

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

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

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

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

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

resourceName

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

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

NoteПримечание.

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

В следующем примере загружаются все артефакты метаданных модели EDM из вызывающей сборки, сборок, указанных в ссылках, и других сборок в каталоге 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)
Управление соединениями и транзакциями (задачи Entity Framework)
Строки соединения (ADO.NET)