Palavra-chave não suportada: “fonte de dados” inicializando o Entity Framework Context

161

Estou inicializando o contexto do Entity Framework Object, e isso me dá o erro de palavra-chave não suportada:

metadata=res://*/MainDB.csdl|res://*/MainDB.ssdl|res://*/MainDB.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Workspace\vs\Leftouch\Leftouch.Web\Data\Leftouch.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;App=EntityFramework"

Peguei a cadeia de conexão diretamente do web.config que estava funcionando e modifiquei apenas o caminho para o arquivo (que defini dinamicamente) e, em vez de usar o valor padrão, usei essa cadeia de conexão explicitamente. O que poderia causar esse erro?

Can Poyrazoğlu
fonte
2
Consulte stackoverflow.com/questions/6003085/… para uma abordagem diferente
LCJ
1
Eu não sei quem veio com isso metadata=res:, então res=somethingelsecom "toda a sintaxe do lugar - mas eles devem estar realmente felizes por não estarem na mesma sala que eu agora: - /
Simon_Weaver 20/17/17
2018 Erro de sintaxe semelhante ao .Net EF Core - providerName não era necessário por uma cadeia de conexão SqlClient. Também não há aspas ou tiques na string para o núcleo EF.
Sql Surfer

Respostas:

321

O verdadeiro motivo pelo qual você estava recebendo esse erro é devido aos "valores em sua cadeia de conexão.

Se você substituir por aspas simples, ele funcionará bem.

https://docs.microsoft.com/archive/blogs/rickandy/explicit-connection-string-for-ef

(Publicado para que outras pessoas possam obter a correção mais rapidamente do que eu.)

Vaccano
fonte
1
Se você estiver passando a cadeia de conexão para a classe ObjectContent, verifique se ela possui aspas simples. Se você estiver obtendo a conexão do arquivo .config, não há problema em usar o & quot; sequência de fuga.
Mike Stonis
Foi isso que o corrigiu para mim.
GiddyUpHorsey
Para aqueles que não estão familiarizados com o funcionamento do XML, "é uma sequência de escape para aspas porque é um caractere reservado no XML.
Vivian River
1
Graças seu trabalho agora
Shivam Srivastava
System.Data.EntityClient.EntityConnectionStringBuilder fez isso por mim, obrigado.
AFract
37

Corrigi isso alterando EntityClientnovamente para SqlClient, mesmo usando o Entity Framework.

Portanto, minha cadeia de conexão completa estava no formato:

<add name="DefaultConnection" connectionString="Data Source=localhost;Initial Catalog=xxx;Persist Security Info=True;User ID=xxx;Password=xxx" providerName="System.Data.SqlClient" />
Selvagem
fonte
2
Trabalhou para mim! +1
Yury Kerbitskov 02/12/16
6
A alteração acima levará potencialmente ao (como no meu caso) o seguinte erro "O contexto está sendo usado no modo Code First com código que foi gerado a partir de um arquivo EDMX para o desenvolvimento do Database First ou Model First"
Psi-Ed
Você pode comentar lançar nova UnintentionalCodeFirstException () in OnModelCreating (), mas parece que uma solução suja
Alexander Ulmaskulov
14

Parece estar faltando o providerName="System.Data.EntityClient"bit. Claro que você entendeu tudo?

Craig Stuntz
fonte
Ok, esse era outro atributo, esqueci esse. Adicionado agora metadata=res://*/MainDB.csdl|res://*/MainDB.ssdl|res://*/MainDB.msl;provider=System.Data.SqlClient;provider name=System.Data.EntityClient;provider connection string=&quot;{0};App=EntityFramework&quot;e agora diz que a chave não foi encontrada: nome do provedor. Eu também tentei em providerName=...vez de provider name=também, mas sem sorte.
Pode Poyrazoğlu
2
Bem, comecei a criá-lo usando a EntityConnectionStringBuilderclasse e, estranhamente, está funcionando agora. Mas ainda não tenho idéia do por que não estava aceitando minha string, mesmo com suas adições.
Pode Poyrazoğlu
3

Acredite ou não, renomear LinqPad.exe.config para LinqPad.config resolveu esse problema.

Sameer Alibhai
fonte
12
Esta é a Microsoft, tudo pode acontecer!
Altaf Patel
Isso não faz sentido. O que o Linqpad tem a ver com a questão e como a renomeação de um executável pode ser útil?
Gert Arnold
Bem, esse erro específico ocorreu com o Linqpad no meu caso e, com isso, foi resolvido. E não mudei o nome do executável. Renomeei o arquivo .exe.config para .config.
Sameer Alibhai 27/12/19
Enfim, é um cenário muito específico. Ele só adiciona ruído como ele não explicar nada,
Gert Arnold
1

Basta usar \ "em vez" ", isso deve resolver o problema.

Nilesh Moradiya
fonte
1

Verifique se você possui Data Sourcee não está DataSourcena sua cadeia de conexão. O espaço é importante. Confie em mim. Eu sou um idiota.

Hairgami_Master
fonte