fuente de datos de palabra clave no admitida

82

Tengo una aplicación asp.net-mvc con la base de datos de membresía predeterminada. Estoy accediendo a él mediante ADO.NET Entity Framework.

Ahora quiero moverlo a IIS, pero aparecieron varios problemas. Tuve que instalar SQL Server Management Studio, crear una nueva base de datos, importar allí todos los datos del archivo .MDF anterior. Lo único que queda por hacer (hasta donde yo sé) es cambiar a la cadena de conexión. Sin embargo, no tengo mucha experiencia con esto y sigo recibiendo la palabra clave no admitida: 'fuente de datos'. excepción. Aquí está mi cadena de conexión:

<add name="ASPNETDBEntities" 
     connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
     providerName="System.Data.EntityClient" />

Alguna idea, ¿qué pasa?

Trimack
fuente
Tuve este error cuando seleccioné el proyecto de inicio incorrecto, por lo que VS no pudo encontrar mis cadenas de conexión. Asegúrese de seleccionar un proyecto de inicio con app.config.
wnbates el

Respuestas:

147

Lo que tiene es una cadena de conexión ADO.NET válida, pero NO es una cadena de conexión de Entity Framework válida.

La cadena de conexión EF se vería así:

<connectionStrings> 
  <add name="NorthwindEntities" connectionString=
     "metadata=.\Northwind.csdl|.\Northwind.ssdl|.\Northwind.msl;
      provider=System.Data.SqlClient;
      provider connection string=&quot;Data Source=SERVER\SQL2000;Initial Catalog=Northwind;Integrated Security=True;MultipleActiveResultSets=False&quot;" 
      providerName="System.Data.EntityClient" /> 
</connectionStrings>

Te faltan todos los elementos metadata=y providerName=en tu cadena de conexión EF ... básicamente solo tienes lo que contiene la provider connection stringparte.

El uso del diseñador EDMX debería crear una cadena de conexión EF válida para usted, en su web.config o app.config.

Bagazo

ACTUALIZACIÓN: OK, entiendo lo que está tratando de hacer: necesita una segunda cadena de conexión "ADO.NET" solo para la base de datos de usuarios / miembros de ASP.NET. Su cadena está bien, pero el nombre del proveedor es incorrecto - tendría que ser "System.Data.SqlClient" - esta conexión no usa ENtity Framework - ¡no especifique el "EntityClient" entonces!

<add name="ASPNETMembership" 
     connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
     providerName="System.Data.SqlClient" />

Si especifica providerName=System.Data.EntityClient==> cadena de conexión de Entity Framework (con los metadatos = y todo).

Si necesita y especifica providerName=System.Data.SqlClient==> cadena de conexión directa de ADO.NET SQL Server sin todas las adiciones de EF

marc_s
fuente
De hecho, lo hizo, pero luego aparece la excepción No se puede abrir el archivo físico "C: \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf". Error 5 del sistema operativo: "5 (no se pudo recuperar el texto de este error. Razón: 15105)". Error al intentar adjuntar una base de datos con nombre automático para el archivo C: \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf. Existe una base de datos con el mismo nombre, o el archivo especificado no se puede abrir o está ubicado en un recurso compartido UNC. De algunas fuentes, pensé, esto está mal ... Gracias de todos modos.
Trimack
No estoy seguro de entender el segundo problema de la cadena de conexión. Debo dejar ahí el generado por el diseñador y agregar la ASPNETMembership que me escribiste?
Trimack
Si tiene sus entidades en el diseñador EDMX, es necesario acceder a ellas mediante un "EntityClient" y una cadena de conexión EF. Si usa el sistema de membresía ASP.NET "listo para usar" , NO es parte de su modelo EF, por lo que cuando crea una cadena de conexión para su base de datos de membresía ASP.NET, no puede usar "EntityClient" como proveedor: use SqlClient.
marc_s
Entonces, sí, necesita ambos: la cadena de conexión EF que su sistema EDMX generó para usted, MÁS una segunda cadena de conexión ADO.NET normal para el sistema de membresía ASP.NET.
marc_s
1
Te acabo de dar el 100º voto a favor por tu publicación. Feliz Navidad :)
RBT
7

Este problema puede ocurrir cuando hace referencia a sus cadenas de conexión web.config (o app.config) por índice ...

var con = ConfigurationManager.ConnectionStrings[0].ConnectionString;

La cadena de conexión de base cero no siempre es la que está en su archivo de configuración, ya que hereda otras de forma predeterminada de más arriba en la pila .

Los enfoques recomendados son acceder a su conexión por su nombre ...

var con = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;

o para borrar el elemento connnectionStrings en su archivo de configuración primero ...

<connectionStrings>
    <clear/>
    <add name="MyConnection" connectionString="...
Calvo
fuente
2

Yo estaba teniendo el mismo problema.
pero este código funciona bien, pruébalo.

<add name="MyCon" connectionString="Server=****;initial catalog=PortalDb;user id=**;password=**;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
Satish Singh
fuente
0

Tuve este problema cuando comencé a usar Entity Framework, sucedió cuando no cambié la conexión del servidor SQL anterior a la conexión EntityFrameWork.

Solución: en el archivo donde se realiza la conexión a través del archivo web.config "agregar nombre =" Entidades "connectionString = XYZ", asegúrese de que se está refiriendo a la conexión correcta, en mi caso tuve que hacer esto

        public static string MyEntityFrameworkConnection
    {
        get
        {
             return ConfigurationManager.ConnectionStrings["Entities"].ConnectionString;
        }

    }

llame a MyEntityFrameworkConnection siempre que sea necesario establecer una conexión.

private string strConnection= Library.DataAccessLayer.DBfile.AdoSomething.MyEntityFrameworkConnection;

nota: la conexión en el archivo web.config se generará automáticamente al agregar el modelo de entidad a la solución.

Mubarak
fuente
0

Sé que esta es una publicación antigua, pero recibí el mismo error recientemente, así que por lo que vale, aquí hay otra solución:

Esto suele ser un error de cadena de conexión, verifique el formato de su cadena de conexión, puede buscar 'cadena de conexión del marco de entidad' o seguir las sugerencias anteriores.

Sin embargo, en mi caso, mi cadena de conexión estaba bien y el error fue causado por algo completamente diferente, así que espero que esto ayude a alguien:

  1. Primero tuve un error de EDMX : había una nueva tabla de base de datos en el EDMX y la tabla no existía en mi base de datos (lo gracioso es el error, el error no fue muy obvio porque no se mostró en mi EDMX o ventana de salida, en cambio estaba escondido en Visual Studio en la ventana 'Lista de errores' debajo de 'Advertencias'). Resolví este error agregando la tabla que faltaba a mi base de datos. Pero, en realidad estaba ocupado tratando de agregar un procedimiento almacenado y todavía recibía el error de 'fuente de datos', así que vea a continuación cómo lo resolví:

  2. Error de procedimiento almacenado : estaba intentando agregar un procedimiento almacenado y cada vez que lo agregué a través de la ventana de diseño de EDMX recibí un error de 'fuente de datos'. La solución fue agregar el procedimiento almacenado como en blanco (conservé el nombre y la declaración del proceso almacenado, pero eliminé el contenido del proceso almacenado y lo reemplacé con 'seleccionar 1' y volví a intentar agregarlo al EDMX). ¡Funcionó! Presumiblemente a EF no le gustó algo dentro de mi proceso almacenado. Una vez que agregué el proceso a EF, pude actualizar el contenido del proceso en mi base de datos a lo que quería que fuera y funciona, se resolvió el error de 'fuente de datos'.

rareza

Spyder
fuente
0

Recibí el mismo error, luego actualicé mi cadena de conexión como se muestra a continuación,

<add name="EmployeeContext" connectionString="data source=*****;initial catalog=EmployeeDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

Pruebe esto, resolverá su problema.

Hasiya
fuente