Share via


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. Para obter mais informações, consulte Como criar uma cadeia de conexão EntityConnection.

As ferramentas do Modelo de Dados de Entidade geram uma cadeia de conexão que é armazenada no arquivo de configuração de 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. Para obter mais informações, consulte Gerenciar conexões e transações.

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.

Veja a seguir um exemplo de uma cadeia de conexão para o AdventureWorks Sales Model armazenado no arquivo de configuração de aplicativo:

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
&#124;DataDirectory&#124; 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 &#124; DataDirectory &#124; 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.

Confira também