2009-09-10 17 views
58

Tengo una aplicación asp.net-mvc con la base de datos de membresía predeterminada. Estoy accediendo a ella por ADO.NET Entity Framework.palabra clave fuente de datos no admitida

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 sé) es cambiar a la cadena de conexión. Sin embargo, no tengo mucha experiencia con esto y sigo recibiendo la palabra clave no compatible: '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?

Respuesta

110

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

La cadena de conexión EF sería algo como esto:

<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 estás perdiendo todas las metadata= y providerName= elementos en la cadena de conexión EF ...... que, básicamente, sólo han lo que está contenido en el provider connection string parte.

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

Marc

ACTUALIZACIÓN: OK, entiendo lo que estás tratando de hacer: se necesita una segunda cadena de conexión "ADO.NET" sólo para la base de datos de usuario/suscripción de ASP.NET. Su cadena está bien, pero el providerName está equivocado. Tendría que ser "System.Data.SqlClient". Esta conexión no usa ENtity Framework. No especifique el "EntityClient".

<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 ==>Marco de la entidad cadena de conexión (con los metadatos y todo =).

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

+0

De hecho, lo hizo, pero luego recibo 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 para este error. Motivo: 15105)". Error al intentar adjuntar una base de datos autodenominada 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 puede abrirse, o está ubicado en el recurso compartido UNC. De algunas fuentes, pensé, esto está mal. Gracias de todos modos. – Trimack

+0

No estoy seguro de entender el segundo problema de la cadena de conexión. Debería dejar allí el generado por el diseñador y agregar la Membresía ASPNET que me escribiste? – Trimack

+0

Si tiene sus entidades en el diseñador de EDMX, debe acceder a ellas mediante un "EntityClient" y una cadena de conexión EF. Si utiliza el sistema de membresía ASP.NET "listo para usar", ** NO ** forma 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. –

4

Este problema puede ocurrir cuando se hace referencia a su web.config (o app.config) Conexión cadenas de índice ...

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

la cadena de conexión a base cero no es siempre el que está en el archivo de configuración, ya que inherits others by default from further up the stack.

Los enfoques recomendados son para acceder a su conexión por 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="... 
0

he tenido este problema cuando Empecé a utilizar Entity Framework, sucedió cuando no cambié la conexión del servidor SQL anterior a la conexión EntityFrameWork.

Solución: en el archivo en el que se realiza la conexión a través archivo web.config "add name =" Entidades "connectionString = XYZ", asegúrese de que usted se refiere a la conexión correcta, en mi caso tuve que Haga esto

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

    } 

llame a MyEntityFrameworkConnection siempre que se necesite 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 añadir el modelo de entidad a la solución.

2

Estaba recibiendo 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" /> 
0

Sé que esto es una entrada antigua, pero tengo el mismo error recientemente así para lo que vale, aquí hay otra solución:

Esto suele ser un error de cadena de conexión, compruebe el formato de su cadena de conexión, puede buscar 'entity framework connectionstring' 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. principio tenía un error 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 curioso es que el error no era muy obvio porque no se mostraba en mi EDMX o ventana de salida, sino que estaba escondido en el estudio visual en el ' Lista de errores 'ventana debajo de' Advertencias '). Resolví este error agregando la tabla faltante a mi base de datos. Pero, en realidad estaba ocupada tratando de agregar un procedimiento almacenado y que sigue recibiendo el error 'fuente de datos' así ver a continuación cómo lo resolví:

  2. error de procedimiento almacenado: yo estaba tratando de agregar un procedimiento almacenado y cada vez que lo agregué a través de la ventana de diseño de EDMX Obtuve un error de "fuente de datos". La solución fue agregar el procedimiento almacenado como en blanco (mantuve el nombre del archivo almacenado y la declaración, pero eliminé el contenido del proceso almacenado y lo reemplacé con 'seleccionar 1' y lo reintenté añadiéndolo al EDMX). ¡Funcionó! Es de suponer que a EF no le gustaba algo dentro de mi proceso almacenado. Una vez que agregué el proc 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 'origen de datos'.

rareza

0

que estaba recibiendo el mismo error, entonces actualizado mi cadena de conexión como abajo,

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

Prueba esto se va a resolver su problema.

Cuestiones relacionadas