Строки соединения (платформа 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 должно быть заключено в кавычки. Ниже приведен один из примеров:
Следующий пример работать не будет:
|
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" />
</connectionStrings>
Расположение файла модели и сопоставления
Параметр Metadata содержит список местоположений, в которых поставщик EntityClient выполняет поиск файлов модели и сопоставления. Файлы модели и сопоставления часто развертываются в том же каталоге, что и исполняемый файл приложения. Эти файлы могут быть также развернуты в конкретном местоположении или включены в виде внедренного ресурса в приложение.
Внедренные ресурсы задаются следующим образом:
Metadata=res://<assemblyFullName>/<resourceName>.
Для определения расположения внедренного ресурса доступны следующие способы.
Параметр |
Описание |
assemblyFullName |
Полное имя сборки с внедренным ресурсом. Это имя включает простое имя, имя версии, поддерживаемую культуру и открытый ключ следующим образом:
Ресурсы можно внедрять в любую сборку, доступную для приложения. Если для assemblyFullName указан символ-шаблон (*), то среда выполнения платформы Entity Framework будет искать ресурсы в следующих местоположениях в указанном порядке:
Если файлы не найдены ни в одном из этих расположений, вызывается исключение.
Примечание
Если используется символ-шаблон (*), то платформа Entity Framework должна обеспечить поиск во всех сборках ресурсов с подходящим именем.В целях повышения производительности задавайте имя сборки, а не символ-шаблон.
|
resourceName |
Имена включенных ресурсов, например AdvendtureWorksModel.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 и поставщику хранилища соответственно.
Термин | Описание |
---|---|
|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)
Connection Strings (ADO.NET)