Строки соединения (платформа 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 должно быть заключено в кавычки. Ниже приведен один из примеров:
Следующий пример работать не будет:
|
Metadata |
Необходимо, если не задано ключевое слово Name. Список каталогов, файлов и расположений ресурсов с разделителями в виде вертикальной черты (|), в которых будет выполняться поиск сведений о метаданных и сопоставлениях. Ниже приведен один из примеров:
Пробелы, расположенные с обеих сторон разделительной вертикальной черты (|), не учитываются. Это ключевое слово является взаимоисключающим по отношению к ключевому слову 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 |
Полное имя сборки с внедренным ресурсом. Это имя включает простое имя, имя версии, поддерживаемую культуру и открытый ключ следующим образом:
Ресурсы можно внедрять в любую сборку, доступную для приложения. Если для assemblyFullName указан символ-шаблон (*), то среда выполнения платформы Entity Framework будет искать ресурсы в следующих местоположениях в указанном порядке:
Если файлы не найдены ни в одном из этих расположений, вызывается исключение.
Примечание.
Если используется символ-шаблон (*), то платформа Entity Framework должна обеспечить поиск во всех сборках ресурсов с подходящим именем. В целях повышения производительности задавайте имя сборки, а не символ-шаблон.
|
resourceName |
Имя внедренного ресурса, такое как AdvendtureWorksModel.csdl. Службы Metadata Services осуществляют поиск файлов или ресурсов только с одним из следующих расширений: CSDL, SSDL или MSL. Если имя resourceName не указано, загружаются все ресурсы модели EDM. Ресурсы должны иметь в сборке уникальные имена. Если в сборке в разных каталогах указано несколько файлов с одинаковыми именами, то в resourceName перед именем ресурса должна быть представлена структура папок, например ИмяПапки.ИмяФайла.csdl. Указание resourceName не требуется, если для assemblyFullName задан символ-шаблон (*). |
Примечание. |
---|
В целях повышения производительности рекомендуется внедрять ресурсы в вызывающую сборку с учетом того, что в приложениях, отличных от веб-приложений, такая рекомендация становится неприменимой, поскольку в вызывающей сборке отсутствуют ссылки на файлы сопоставлений и метаданных. |
В следующем примере загружаются все артефакты метаданных модели 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| |
Преобразуется в относительный путь к файлам сопоставлений и метаданных. Это значение определяется с помощью метода Если в списке путей метаданных нужно передать имя физического каталога «DataDirectory», добавьте пробельные символы с обеих сторон имени, например |
~ |
Преобразуется в корневой каталог веб-приложения. Символ ~ в ведущей позиции всегда интерпретируется как оператор определения корневого каталога веб-приложения (~), хотя и может представлять допустимый локальный подкаталог. Для ссылки на локальный подкаталог пользователь должен явно передать |
Значение 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)