Cadeias de conexão no ADO.NET Entity Framework
Uma cadeia de conexão contém informações de inicialização que são passadas como parâmetros de um provedor de dados para uma fonte de dados. A sintaxe depende do provedor de dados, e a cadeia de conexão é analisada durante a tentativa de abrir uma conexão. As cadeias de conexão usadas por Entity Framework contêm informações usadas para conectar ao provedor de dados ADO.NET subjacente que dá suporte a Entity Framework. Elas também contêm informações sobre os arquivos de modelo e de mapeamento necessários.
A cadeia de conexão é usada pelo provedor EntityClient ao acessar metadados de modelo e de mapeamento e ao se conectar à fonte de dados. A cadeia de conexão pode ser acessada ou definida por meio da propriedade ConnectionString de EntityConnection. A classe EntityConnectionStringBuilder pode ser usada para construir ou acessar programaticamente parâmetros na cadeia de conexão.
As ferramentas do Modelo de Dados de Entidade geram uma cadeia de conexão que é armazenada no arquivo de configuração do aplicativo. O ObjectContext recupera essas informações de conexão automaticamente ao criar consultas de objeto. O EntityConnection usado por uma instância ObjectContext pode ser acessado a partir da propriedade Connection.
Sintaxe da cadeia de conexão
Para saber mais sobre a sintaxe geral para cadeias de conexão, consulte Sintaxe da cadeia de conexão | Cadeias de conexão no ADO.NET.
Parâmetros de cadeia de conexão
A tabela a seguir lista os nomes válidos para valores de palavra-chave na propriedade ConnectionString.
Palavra-chave | Descrição |
---|---|
Provider |
Necessária quando a palavra-chave Name não é especificada. O nome do provedor, que é usado para recuperar o objeto DbProviderFactory do provedor subjacente. Esse valor é constante.Quando a palavra-chave Name não é incluída em uma cadeia de conexão de entidade, um valor não vazio para a palavra-chave Provider é necessário. Essa palavra-chave é mutuamente excludente com a palavra-chave Name . |
Provider Connection String |
Opcional. Especifica a cadeia de conexão específica ao provedor que é passada para a fonte de dados subjacente. Essa cadeia de conexão contém pares de palavra-chave/valor válidos para o provedor de dados. Uma palavra-chave Provider Connection String inválida produzirá um erro em tempo de execução ao ser avaliada pela fonte de dados.Essa palavra-chave é mutuamente excludente com a palavra-chave Name .Verifique o escape do valor de acordo com a sintaxe geral de Cadeias de conexão ADO.NET. Considere, por exemplo, a seguinte cadeia de conexão: Server=serverName; User ID = userID . Deve ser de escape porque contém um ponto e vírgula. Como não contém aspas duplas, podem ser usadas para o escape:Provider Connection String ="Server=serverName; User ID = userID"; |
Metadata |
Necessária quando a palavra-chave Name não é especificada. Uma lista de diretórios, arquivos e locais de recursos delimitados por pipe na qual procurar informações de metadados e mapeamento. A seguir, é mostrado um exemplo:Metadata= c:\model | c:\model\sql\mapping.msl; Os espaços em branco em cada lado do separador de pipe são ignorados. Essa palavra-chave é mutuamente excludente com a palavra-chave Name . |
Name |
O aplicativo pode, opcionalmente, especificar o nome da conexão em um arquivo de configuração do aplicativo que forneça os valores de cadeia de conexão de palavra-chave-valor necessários. Nesse caso, não é possível fornecê-los diretamente na cadeia de conexão. A palavra-chave Name não é permitida em um arquivo de configuração.Quando a palavra-chave Name não é incluída na cadeia de conexão, um valor não vazio para a palavra-chave Provider é necessário.Essa palavra-chave é mutuamente excludente com todos as outras palavras-chave de cadeia de conexão. |
Locais de arquivos de modelo e de mapeamento
O parâmetro Metadata
contém uma lista de locais para que o provedor EntityClient
pesquise arquivos de modelo e de mapeamento. Os arquivos de modelo e de mapeamento geralmente são implantados no mesmo diretório que o arquivo executável do aplicativo. Esses arquivos também podem ser implantados em um local específico ou ser incluídos como um recurso inserido no aplicativo.
Os recursos inseridos são especificados como a seguir:
Metadata=res://<assemblyFullName>/<resourceName>
As seguintes opções estão disponíveis para definir o local de um recurso inserido:
Opção | Descrição |
---|---|
assemblyFullName |
O nome completo de um assembly com o recurso inserido. O nome inclui o nome simples, o nome da versão, a cultura com suporte e a chave pública, como a seguir:ResourceLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null Os recursos podem ser inseridos em qualquer assembly que seja acessível pelo aplicativo. Se você especificar um curinga (*) para assemblyFullName , o runtime do Entity Framework pesquisará os recursos nos seguintes locais, nesta ordem:1. Assembly de chamada. 2. Assemblies referenciados. 3. Assemblies no diretório bin de um aplicativo. Se os arquivos não estiverem em um desses locais, será gerada uma exceção. Observação: ao usar um caractere curinga (*), o Entity Framework pesquisará os recursos com o nome correto em todos os assemblies. Para melhorar o desempenho, especifique o nome do assembly, em vez do curinga. |
resourceName |
O nome do recurso incluído, como AdventureWorksModel.csdl. Os serviços de metadados só procuram arquivos ou recursos com uma das seguintes extensões: .csdl, .ssdl ou .msl. Se a palavra-chave resourceName não for especificada, todos os recursos de metadados serão carregados. Os recursos devem ter nomes exclusivos em um assembly. Se vários arquivos com o mesmo nome forem definidos em diferentes diretórios no assembly, a palavra-chave resourceName deverá incluir a estrutura de pastas antes do nome do recurso, por exemplo, FolderName.FileName.csdl.resourceName não é necessária quando você especifica um curinga (*) para assemblyFullName . |
Observação
Para melhorar o desempenho, insira recursos no assembly de chamada, exceto em cenários não projetados para a Web, onde não há referências a arquivos subjacentes de mapeamento e de metadados no assembly de chamada.
O exemplo a seguir carrega todos os arquivos de modelo e de mapeamento no assembly de chamada, em assemblies referenciados e em outros assemblies no diretório bin de um aplicativo.
Metadata=res://*/
O exemplo a seguir carrega o arquivo model.csdl do assembly AdventureWorks e carrega os arquivos model.ssdl e model.msl do diretório padrão do aplicativo em execução.
Metadata=res://AdventureWorks, 1.0.0.0, neutral, a14f3033def15840/model.csdl|model.ssdl|model.msl
O exemplo a seguir carrega os três recursos especificados do assembly específico.
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
O exemplo a seguir carrega todos os recursos inseridos com as extensões .csdl, .msl e .ssdl do assembly.
Metadata=res://AdventureWorks, 1.0.0.0, neutral, a14f3033def15840/
O exemplo a seguir carrega todos os recursos no caminho de arquivo relativo, além de "datadir\metadata\" do local do assembly carregado.
Metadata=datadir\metadata\
O exemplo a seguir carrega todos os recursos no caminho de arquivo relativo do local do assembly carregado.
Metadata=.\
Suporte para |DataDirectory| Cadeia de caracteres e substituição e operador raiz do aplicativo Web (~)
DataDirectory
e o operador ~ são usados no ConnectionString como parte das palavras-chave Metadata
e Provider Connection String
. EntityConnection encaminha DataDirectory
e o operador ~ para MetadataWorkspace e para o provedor de armazenamento, respectivamente.
Termo | Descrição |
---|---|
|DataDirectory| |
Resolve como um caminho relativo a arquivos de mapeamento e metadados. Este é o valor que é definido por meio do método AppDomain.SetData("DataDirectory", objValue) . A cadeia de caracteres de substituição DataDirectory deve estar entre os caracteres de pipe e sem espaços em branco entre o nome e os caracteres de pipe. O nome DataDirectory não diferencia maiúsculas de minúsculas.Se um diretório físico chamado "DataDirectory" precisar ser passado como membro da lista de caminhos de metadados, adicione espaço em branco a um ou ambos os lados do nome. Por exemplo: Metadata="DataDirectory1 | DataDirectory | DataDirectory2" . Um aplicativo ASP.NET resolve |DataDirectory| como a pasta "<raiz do aplicativo>/app_data". |
~ | Resolve como a raiz do aplicativo Web. O caractere ~ em uma posição à esquerda é sempre interpretado como o operador raiz do aplicativo Web (~), embora possa representar um subdiretório local válido. Para fazer referência a um subdiretório local, o usuário deve passar ./~ explicitamente. |
DataDirectory
e o operador ~ devem ser especificados somente no início de um caminho; eles não são resolvidos em nenhuma outra posição. O Entity Framework tentará resolver ~/data
, mas tratará /data/~
como um caminho físico.
Um caminho que começa com DataDirectory
ou com o operador ~ não pode ser resolvido como um caminho físico fora da ramificação de DataDirectory
e do operador ~. Por exemplo, os seguintes caminhos serão resolvidos: ~
, ~/data
, ~/bin/Model/SqlServer
. Os seguintes caminhos não serão resolvidos: ~/..
, ~/../other
.
DataDirectory
e o operador ~ podem ser estendidos para incluir subdiretórios, conforme a seguir: |DataDirectory|\Model
, ~/bin/Model
A resolução da cadeia de caracteres de substituição DataDirectory
e do operador ~ é não recursiva. Por exemplo, quando DataDirectory
incluir o caractere ~
, será gerada uma exceção. Isso evita uma recursão infinita.