underlying the subyacente proveedor open framework failed error entityexception connectionstring c# entity-framework

c# - the - Entity Framework El proveedor subyacente falló en Open



error del proveedor subyacente en connectionstring (17)

ERROR: se produjo una excepción del tipo ''System.Data.Entity.Core.EntityException'' en EntityFramework.SqlServer.dll pero no se manejó en el código de usuario Información adicional: El proveedor subyacente falló en Open.

SOLUCIÓN:

  • Añadir en Modelo:

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [Key]

  • Espacio de nombres:

    using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema;

  • Ejemplo:

    namespace MvcApplication1.Models { [Table("tblEmployee")] public class Employee { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [Key] public int EmplyeeID { get; set; } public string Name { get; set; } public string Gender { get; set; } public string City { get; set; } } }

A continuación se muestra mi cadena de conexión:

connectionString = "metadata = res: //*/EDMX.Test.csdl | res: //*/EDMX.Test.ssdl | res: //*/EDMX.Test.msl; provider = System.Data.SqlClient; provider cadena de conexión = "Origen de datos = equipo_inicial; Catálogo inicial = Prueba db; Información de seguridad persistente = Verdadero; ID de usuario = TestUser; Contraseña = $ 1234; MultipleActiveResultSets = Verdadero" "

Aquí está el código donde el programa se atascó:

EDMX.TestingEntity context = new EDMX.TestingEntity(); var query = from t in context.User where t.UserName == _userName select t;

Después de ejecutar el código anterior, reviso la consulta de variables y encontré una excepción

El proveedor subyacente falló en la apertura.

He comprobado:

  1. La conexión entre el servidor y la computadora es normal
  2. Puedo iniciar sesión en la base de datos con el nombre de usuario testuser y con la contraseña $ 1234
  3. He comprobado la configuración de seguridad en la base de datos (SQL Server) que se ha otorgado permiso para testUser

¿Por qué sucede esta excepción? Estoy usando .net 4.5

Adicional:

Intenté nuevamente, observé la excepción interna y fue: Ocurrió un error específico de la instancia o relacionado con la red al establecer una conexión a SQL Server. El servidor no se encontró o no estaba accesible. Verifique que el nombre de la instancia sea correcto y que SQL Server esté configurado para permitir conexiones remotas. (proveedor: Named Pipes Provider, error: 40 - No se pudo abrir una conexión a SQL Server)

Sé que puede ser un problema de red, pero he apagado el servidor de seguridad del servidor y también mi computadora y lo he intentado de nuevo, pero aún no he tenido éxito.

En este momento, copió la cadena de conexión a un programa para probar esta conexión y estaba funcionando bien ...

Acabo de revertir todos los cambios y probar de nuevo y funcionó


  1. Buscar "Servicios de componentes" en programas y archivos
  2. Ir a Servicios
  3. Encuentre el servicio "Coordinador de transacciones distribuidas"
  4. Haga clic derecho y reinicie el servicio

Acabas de reiniciar el servicio y el código debería ejecutarse sin errores.


Abra el Administrador de configuración de SQL Server y luego haga clic en los servicios del servidor SQL. Se mostrará una lista de la lista. Haga clic derecho en el servidor SQL y haga clic en Inicio.


En mi caso, resolví el error agregando una contraseña de conexión en la cadena de conexión.

Al configurar el modelo EF, seleccioné la opción para excluir datos confidenciales de la cadena de conexión. Por lo tanto, la contraseña no se incluyó inicialmente.


Intente esto: abra el símbolo del sistema como administrador y escriba este reinicio de Winsock de netsh

Reinicie su sistema y vuelva a intentarlo.


La posible solución se describe en este Consejo Consejo :

Como la gente mencionó las credenciales de usuario del servicio de red de usuario de IIS al intentar iniciar sesión en el servidor SQL. Tan solo cambia la configuración del grupo de aplicaciones en tu IIS:

  1. Abra el administrador del servicio de información de Internet
  2. Haga clic en Grupos de aplicaciones en el árbol de navegación izquierdo.
  3. Seleccione su versión Pool. En mi caso, estoy usando ASP .Net v4.0. Si no tiene esta versión, seleccione DefaultAppPool.
  4. Haga clic derecho en el paso 3, y seleccione la configuración avanzada.
  5. Seleccione Identidad en la ventana de propiedades y haga clic en el botón para cambiar el valor.
  6. Seleccione Sistema local en el cuadro combinado Cuentas incorporadas y haga clic en Aceptar. Eso es. Ahora ejecuta tu aplicación. Todo funciona bien

Mi cliente reportó este error. Encontré que él estaba jugando con los archivos * .ldf. Copió el archivo * ldf en una base de datos y lo renombró para que coincida con una segunda base de datos (que le pedí que coloque en una carpeta).

Repliqué el mismo escenario y obtuve el mismo error en mi sistema de desarrollo. El error se corrigió después de eliminar los archivos * ldf.


Obtuve este problema mientras continuaba la ejecución de una prueba unitaria que llama a un método que usa un procesamiento paralelo. Sé que hay partes de EF que no son seguras para subprocesos, por lo que me pregunto si es un conflicto donde la conexión está siendo abierta. y cerró fuera de sincronía con las operaciones.

Mi rastro de pila mostró esto:

at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) at System.Threading.Tasks.Task.Wait() at System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally) at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IList`1 list, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally) at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally) at System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable`1 source, Action`1 body)

Así que esa es la pista que seguí. Cuando volví a un solo hilo foreach en lugar de Parallel.ForEach, el problema desapareció.

Joey


Para mí, cuando eso normalmente comienza a suceder, tengo que usar el escritorio remoto en el servicio y, como mínimo, reiniciar IIS. Por lo general, comienza a aparecer justo después de implementar el código. En raras ocasiones he tenido que reiniciar los servicios SQL e IIS. Escribí un script por lotes para tomar un parámetro (1 o 2) y configurarlo para hacer un reinicio de IIS (es decir, 1), o ir completamente nuclear (es decir, 2).


Parece un problema de conexión. Puede usar las propiedades del enlace de datos para encontrar si la conexión está bien. Haz lo siguiente:

  1. Cree un bloc de notas en blanco y cámbiele el nombre a "X.UDL"
  2. Doble click para abrirlo.
  3. En la pestaña de conexiones, elija el nombre del servidor / ingrese el nombre, use las credenciales y la base de datos correctas
  4. Haga clic en Aceptar para guardarlo.

Ahora abra el archivo en el Bloc de notas y compare las propiedades de la cadena de conexión.


Por favor, compruebe lo siguiente primero.

Al generar el Edmx, le habrías dado un nombre a tu cadena de conexión. que entra en la configuración de la aplicación del proyecto con la Entidad.

¿Ha copiado la misma cadena de conexión a su archivo de configuración principal? Además, el nombre debe ser el mismo que el que dio al generar el archivo EDMX.


Recibo esta excepción a menudo mientras ejecuto en mi máquina de desarrollo, especialmente después de hacer un cambio de código, reconstruir el código y luego ejecutar una (s) página (s) web asociada (s). Sin embargo, el problema desaparece para mí si subo el parámetro CommandTimeout a 120 segundos o más (por ejemplo, establezca context.Database.CommandTimeout = 120 antes de la instrucción LINQ). Si bien esto se solicitó originalmente hace 3 años, puede ayudar a alguien que busca una respuesta. Mi teoría es que VisualStudio toma tiempo para convertir las bibliotecas binarias creadas en código de máquina y se agota cuando se intenta conectarse a SQL Server después de esa compilación justo a tiempo.


Si está utilizando un archivo .mdf local, probablemente un software de sincronización como Dropbox haya intentado sincronizar dos archivos de registro (.ldf) en dos computadoras diferentes, puede eliminar los archivos de registro del directorio bin y asegurarse de que las propiedades .mdf-> Copiar al Directorio de salida -> Copiar si es más nuevo que copiará el archivo DB seleccionado y se registrará en el Directorio de contenedores. ! Alerta: si su archivo DB solo ha cambiado en el directorio bin, todos los cambios se descartarán!


Siempre verifique la Excepción Interna si la hay. En mi caso, Inner Exception resultó ser realmente útil para resolver el problema.

Mi sitio estaba funcionando bien en Dev Environment. Pero después de implementarlo en producción, comenzó a emitir esta excepción, pero la excepción interna decía que el inicio de sesión falló para el usuario en particular.
Así que me di cuenta de que era algo que ver con la conexión en sí. Por lo tanto, intentó iniciar sesión usando SSMS e incluso eso falló.

Finalmente, descubrí que la excepción aparecía por la sencilla razón de que el servidor SQL solo tenía habilitada la autenticación de Windows y la autenticación de SQL estaba fallando, que era lo que estaba usando para la autenticación.

En resumen, el cambio de autenticación a mixto (SQL y Windows), solucionó el problema para mí. :)


Tuve este error y fue causado por un error tipográfico en la cadena de conexión en App.config.


Tuvimos una cadena de conexión en web.config con Data Source=localhost , y hubo un error (MSSQL estaba en la misma máquina). Cambiarlo a ''DOMINIO / MÁQUINA'' real ayudó, por cierto.


Vi este error cuando un colega intentaba conectarse a una base de datos que estaba protegida detrás de una VPN. El usuario desconocía que había cambiado a una red inalámbrica que no tenía acceso VPN. Una forma de probar este escenario es ver si puede establecer una conexión por otros medios, como SSMS, y ver si eso también falla.