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.