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?


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).


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" />

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?


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.


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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.