2012-05-23 11 views
8

Este código funciona bien:entidad framework web

<connectionStrings> 
    <add name="EFDbContext" connectionString="Data Source=.\SQLEXPRESS; Initial Catalog=myDB;Integrated Security=SSPI; 
" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True" /> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 

pero este código no funciona:

<connectionStrings> 
    <add name="EFDbContext" connectionString="Data Source=.\MSSQLSERVER2008; Initial Catalog=myDb;Integrated Security=SSPI;User ID=useradmin; Password=pass; " providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="Data Source=.\MSSQLSERVER2008; Integrated Security=True; MultipleActiveResultSets=True" /> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 

El segundo código debe ejecutarse en un servidor remoto con una instancia y MSQSERVER2008 cuando se carga la página, aparece el siguiente mensaje:

Se produjo un error al obtener información del proveedor de la base de datos. Esto puede ser causado por Entity Framework usando una cadena de conexión incorrecta. Verifique las excepciones internas para más detalles y asegúrese de que la cadena de conexión sea correcta.

+0

¿Ha comprobado la excepción interna según lo sugerido por el mensaje de error que recibió? –

+0

¿Revisó las excepciones internas para obtener más información? – granaker

Respuesta

11

El problema está en el parámetro Seguridad integrada. Cuando se establece en True, .Net intenta abrir la conexión con el evento de usuario actual si especifica un usuario y una contraseña. Entonces, para abrir la conexión con un usuario específico, establezca la Seguridad integrada en False y funcionará.

<connectionStrings> 
    <add name="EFDbContext" connectionString="Data Source=.\MSSQLSERVER2008; Initial Catalog=myDb;Integrated Security=SSPI;User ID=useradmin; Password=pass; " providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="Data Source=.\MSSQLSERVER2008; Integrated Security=False; MultipleActiveResultSets=True" /> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 
1

Esto es lo que tenía que hacer para que EF conectarse a través de la configuración de serie de conexión dinámicos, aunque mis ajustes son la entrada del usuario, no web.config:

 // Set the properties for the data source. 
     sqlBuilder.ConnectionString = "Integrated Security=SSPI;"; 
     sqlBuilder.DataSource = serverName; 
     sqlBuilder.InitialCatalog = databaseName; 
     sqlBuilder.ConnectTimeout = 60; 
     sqlBuilder.MultipleActiveResultSets = true; 
     if(!string.IsNullOrEmpty(userName) || !string.IsNullOrEmpty(password)) 
     { 
      sqlBuilder.UserID = userName; 
      sqlBuilder.Password = password; 
      //sqlBuilder.IntegratedSecurity = false; 
     } 
     else 
     { 
      sqlBuilder.IntegratedSecurity = true; 
     } 
+0

Ugh. ¿Por qué downvote? Mi solución funciona y resuelve el problema fácilmente. Tuve el mismo problema que el OP, y lo resolví asignando dinámicamente los valores requeridos. Una solución de configuración web sería trivial desde aquí, simplemente usando ConfigurationManager.AppSettings. – Taersious

0

asegúrese de que en la conexión de código de cadena es correcto:

"Data Source=.\MSSQLSERVER2008; Initial Catalog=myDb;Integrated Security=SSPI;User ID=useradmin; Password=pass;" 

compruebe su servidor sql.

Cuestiones relacionadas