Palabra clave no admitida: "fuente de datos" que inicializa el contexto del marco de la entidad

161

Estoy inicializando el contexto del objeto Entity Framework, y esto me da el error de palabra clave no compatible:

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"

Tomé la cadena de conexión directamente de web.config que estaba funcionando, y modifiqué solo la ruta al archivo (que configuré dinámicamente), y en lugar de usar el valor predeterminado, usé esta cadena de conexión explícitamente. ¿Qué podría causar este error?

Can Poyrazoğlu
fuente
2
Consulte stackoverflow.com/questions/6003085/… para un enfoque diferente
LCJ
1
No sé a quién se le ocurrió esto metadata=res:, entonces res=somethingelsecon "toda la sintaxis del lugar, pero deberían estar muy contentos de no estar en la misma habitación que yo en este momento: - /
Simon_Weaver
Error de sintaxis similar de .Net EF Core 2018: proveedorNombre no era necesario para una cadena de conexión SqlClient. Además, no hay comillas ni marcas en la cadena para el núcleo EF.
Sql Surfer

Respuestas:

322

La verdadera razón por la que recibiste este error es por los "valores en tu cadena de conexión.

Si los reemplaza con comillas simples, funcionará bien.

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

(Publicado para que otros puedan obtener la solución más rápido que yo).

Vaccano
fuente
1
Si está pasando la cadena de conexión a la clase ObjectContent, asegúrese de que tenga comillas simples. Si está obteniendo la conexión desde el archivo .config, entonces está bien usar el & quot; secuencia de escape.
Mike Stonis
Esto es lo que me arregló.
GiddyUpHorsey
Para aquellos de ustedes que no están familiarizados con el funcionamiento de XML, "es una secuencia de escape para una comilla porque es un carácter reservado en XML.
Vivian River
1
Gracias está funcionando ahora
Shivam Srivastava
System.Data.EntityClient.EntityConnectionStringBuilder lo hizo por mí, gracias.
AFract
37

Lo arreglé cambiando de EntityClientnuevo a SqlClient, aunque estaba usando Entity Framework.

Entonces mi cadena de conexión completa estaba en el formato:

<add name="DefaultConnection" connectionString="Data Source=localhost;Initial Catalog=xxx;Persist Security Info=True;User ID=xxx;Password=xxx" providerName="System.Data.SqlClient" />
Salvaje
fuente
2
¡Trabajó para mi! +1
Yury Kerbitskov
66
El cambio anterior conducirá potencialmente (como en mi caso) al siguiente error "El contexto se está utilizando en modo Code First con código que se generó a partir de un archivo EDMX para el desarrollo de Database First o Model First"
Psi-Ed
Puede comentar lanzar una nueva UnintentionalCodeFirstException () en OnModelCreating (), pero parece una solución sucia
Alexander Ulmaskulov
14

Parece que le falta el providerName="System.Data.EntityClient"bit. ¿Seguro que tienes todo?

Craig Stuntz
fuente
Ok, ese era otro atributo, olvidé ese. Lo agregó ahora 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;y ahora dice clave no encontrada: nombre del proveedor. También lo intenté en providerName=...lugar de provider name=también, pero no tuve suerte.
Can Poyrazoğlu
2
Bueno, comencé a crearlo usando la EntityConnectionStringBuilderclase, y extrañamente, está funcionando ahora. Pero todavía no tengo idea de por qué no estaba aceptando mi cadena, incluso con sus adiciones.
Can Poyrazoğlu
3

Lo creas o no, renombrar LinqPad.exe.config a LinqPad.config resolvió este problema.

Sameer Alibhai
fuente
12
Esto es Microsoft, ¡puede pasar cualquier cosa!
Altaf Patel
Esto no tiene sentido. ¿Qué tiene que ver Linqpad con la pregunta y cómo puede ser útil cambiar el nombre de un ejecutable?
Gert Arnold
Bueno, este error particular ocurrió con Linqpad en mi caso y al hacerlo lo resolvió. Y no cambié el nombre del ejecutable. Cambié el nombre de .exe.config a .config.
Sameer Alibhai
De todos modos, es un escenario muy específico. Solo agrega ruido ya que no explica nada,
Gert Arnold
1

Simplemente use \ "en su lugar", debería resolver el problema.

Nilesh Moradiya
fuente
1

Asegúrese de tener Data Sourcey no DataSourceen su cadena de conexión. El espacio es importante. Créeme. Soy un idiota.

Hairgami_Master
fuente