No se ha encontrado ningún proveedor de Entity Framework para el proveedor ADO.NET con el nombre invariable ‘System.Data.SqlClient’

Después de descargar EF6 por nuget e intentar ejecutar mi proyecto, devuelve el siguiente error:

No se ha encontrado ningún proveedor de Entity Framework para el proveedor ADO.NET con el nombre invariable ‘System.Data.SqlClient’. Asegúrese de que el proveedor esté registrado en la sección ‘entityFramework’ del archivo de configuración de la aplicación. Consulte http://go.microsoft.com/fwlink/?LinkId=260882 para obtener más información.

enter image description here

Acabo de entrar en el mismo problema y parece que EntityFramework aunque se instaló desde NuGet Package Manager no se instaló correctamente en el proyecto.

Logré solucionarlo ejecutando el siguiente comando en la consola de Package Manager :

 PM> Install-Package EntityFramework 

Agregaste EF a un proyecto de biblioteca de clase. También debe agregarlo al proyecto que lo hace referencia (su aplicación de consola, sitio web o lo que sea).

No necesita instalar Entity Framework en su aplicación de consola, solo necesita agregar una referencia al ensamblado EntityFramework.SqlServer.dll. Puede copiar este ensamblaje del proyecto Biblioteca de clases que usa Entity Framework en una carpeta LIB y agregarle una referencia.

En resumen:

  • Solicitud de biblioteca de clases:
    • Instalar Entity Framework
    • Escriba su código de capa de datos
    • El archivo app.config tiene toda la configuración relacionada con Entity Framework excepto la cadena de conexión.
  • Cree una aplicación de consola, web o escritorio:
    • Agregue una referencia al primer proyecto.
    • Agregue una referencia a EntityFramework.SqlServer.dll.
    • app.config / web.config tiene la cadena de conexión (recuerde que el nombre de la entrada de configuración debe ser el mismo que el nombre de la clase DbContext).

Espero que ayude.

También puede ver este mensaje si olvida incluir “EntityFramework.SqlServer.dll”.

Parece ser un archivo recientemente agregado en EF6. Inicialmente no lo había incluido en mi módulo de fusión y encontré el problema que se detalla aquí.

Cuando instala Entity Framework 6 a través de Nuget . EntityFramework.SqlServer a veces falla por otro ejecutable. Simplemente agregue el paquete Nuget a ese proyecto.

Algunas veces arriba no funciona para Test Project

Para resolver este problema en el Proyecto de Prueba simplemente coloque este Método dentro de Proyecto de Prueba:

 public void FixEfProviderServicesProblem() { var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance; } 

Nunca se ha llamado a este método, pero según mis observaciones, el comstackdor eliminará todos los ensamblados “innecesarios” y, sin utilizar el elemento EntityFramework.SqlServer la prueba fallará.

En lugar de agregar EntityFramework.SqlServer al proyecto de host, puede garantizar una referencia estática desde su proyecto de modelo / entidad como este

 static MyContext() { var type = typeof(System.Data.Entity.SqlServer.SqlProviderServices); if(type == null) throw new Exception("Do not remove, ensures static reference to System.Data.Entity.SqlServer"); } 

Esto hará que el proceso de comstackción incluya el ensamblado con el proyecto de host.

Más información en mi blog http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/

Agregar esta función

 private void FixEfProviderServicesProblem() 

a la clase de contexto de la base de datos en la clase de la biblioteca y al DLL faltante EntityFramework.SqlServer.dll se copiará en los lugares correctos.

 namespace abc { using System.Data.Entity; public partial class WorkflowDBContext : DbContext { public WorkflowDBContext() : base("name=WorkflowDBConnStr") { } public virtual DbSet WorkflowDefinitions { get; set; } public virtual DbSet WorkflowInstances { get; set; } public virtual DbSet EngineAlerts { get; set; } public virtual DbSet AsyncWaitItems { get; set; } public virtual DbSet TaskItems { get; set; } public virtual DbSet TaskItemLinks { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { } private void FixEfProviderServicesProblem() { // The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' // for the 'System.Data.SqlClient' ADO.NET provider could not be loaded. // Make sure the provider assembly is available to the running application. // See http://go.microsoft.com/fwlink/?LinkId=260882 for more information. var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance; } } } 

.

Ninguno de estos funcionó para mí. Encontré la solución en otra pregunta de stackoverflow . Lo agregaré aquí para una referencia fácil:

Debe hacer una referencia, por lo que se copiará en la ruta de la aplicación den. Porque más tarde se hará referencia en tiempo de ejecución. Entonces no necesita copiar ningún archivo.

 private volatile Type _dependency; public MyClass() { _dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices); } 

Obtuve el mismo error al usar Entity Framework 6 con SQL Server Compact 4.0. El artículo sobre MSDN para proveedores de Entity Framework para EF6 fue útil. Ejecutar los respectivos comandos de proveedor como paquetes nuget en la consola de Package Manager podría resolver el problema, ya que los paquetes NuGet agregarán automáticamente registros al archivo de configuración. PM> Install-Package EntityFramework.SqlServerCompact para resolver el problema.

Cuando el error ocurre en los proyectos de prueba, la solución más bonita es decorar la clase de prueba con:

 [DeploymentItem("EntityFramework.SqlServer.dll")] 

Me encontré con este problema hoy cuando trabajo con un conjunto de servicios web, cada uno en diferentes proyectos, y un proyecto separado que contiene pruebas de integración para algunos de esos servicios.

He estado utilizando esta configuración por un tiempo con EF5, sin necesidad de incluir referencias a EF del Proyecto de prueba de integración.

Ahora, después de actualizar a EF6, parece que también necesito incluir una referencia a EF6 en el proyecto de prueba de integración, aunque no se use allí (prácticamente como se indicó anteriormente en user3004275 ).

Indicaciones que enfrenta el mismo problema:

  • Las llamadas directas a EF (conexión a un DB, obtención de datos, etc.) funcionan bien, siempre que se inicien desde un proyecto que tenga referencias a EF6.
  • Las llamadas al servicio a través de una interfaz de servicio publicada funcionan bien; es decir, no faltan referencias “internamente” en el servicio.
  • Las llamadas directas a métodos públicos en el proyecto de servicio, desde un proyecto fuera del servicio, causarán este error, aunque EF no se usa en ese proyecto en sí; solo internamente en el proyecto llamado

El tercer punto es lo que me desanimó por un tiempo, y todavía no estoy seguro de por qué es necesario. Agregar una referencia a EF6 en mi proyecto de prueba de integración lo resolvió en cualquier caso …

Me encuentro con este problema hoy. Tengo una biblioteca de clases de repository de datos con el paquete EFG NuGet y la aplicación de consola para probar, que solo tienen referencia al proyecto de biblioteca de clase. Creé un comando post-comstackción muy simple, que copia EntityFramework.SqlServer.dll de la carpeta Bin \ Debug de la biblioteca de la clase a la carpeta Bin \ Debug de la aplicación de consola y el problema se resuelve. No olvide agregar la sección entityFramework al archivo .config de la aplicación de consola.

Eliminar la carpeta BIN lo hizo por mí

Añada abajo a su app.config.

            

Debería forzar una referencia estática al ensamblado EntityFramework.SqlServer.dll , pero en lugar de poner un código ficticio, puede hacerlo de una manera más hermosa:

  1. Si ya tiene una clase DbConfiguration :

     public class MyConfiguration : DbConfiguration { public MyConfiguration() { this.SetProviderServices(System.Data.Entity.SqlServer.SqlProviderServices.ProviderInvariantName, System.Data.Entity.SqlServer.SqlProviderServices.Instance); } } 
  2. Si no tiene una clase DbConfiguration , debe poner el siguiente código al inicio de la aplicación (antes de que se use EF):

     static MyContext() { DbConfiguration.Loaded += (sender, e) => e.ReplaceService((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance); } 

Acabo de volver a instalar Entity Framework usando Nuget. Y siga las instrucciones escritas en el siguiente enlace: http://robsneuron.blogspot.in/2013/11/entity-framework-upgrade-to-6.html

Creo que el problema se resolverá.

Además, asegúrese de que el proyecto de inicio sea el proyecto que contiene su dbcontext (o app.config relevante). El mío estaba tratando de iniciar un proyecto de sitio web que no tenía todos los ajustes de configuración necesarios.

Intenté casi todo lo anterior y nada funcionó.

Solo cuando configuré las DLL referenciadas en las propiedades EntityFramework y EntityFramework.SqlServer Proyecto Predeterminado Copy Local to True , ¡comenzó a funcionar!

todos necesito su atención. Que dos dll EntityFramework.dll y EntityFramework.SqlServer.dll son DataAccess layer Library Y que no es lógico usarlos a la vista o cualquier otra layer.it resuelve su problema pero no es lógico.

La forma lógica es que el atributo de enitiess los elimina y los reemplaza con Fluent API. Esta es una solución real

Tenía una aplicación de consola y una biblioteca de clases. En la biblioteca de clases, creé Entity Data Model (haga clic con el botón derecho en Class Library> Add> New Item> Data> ADO.NET Entity Data Model 6.0) y coloque la referencia dentro de la aplicación de la consola. Entonces, tiene una aplicación de consola que tiene referencia a la biblioteca de clases y dentro de la biblioteca de clases tiene el modelo de EF. Tuve el mismo error cuando traté de obtener algunos registros de la mesa.

Resolví este problema siguiendo estos pasos:

  1. Haga clic derecho en la solución y elija la opción ‘Administrar paquetes NuGet para la solución’ y aparecerá la ventana del administrador de paquetes NuGet.
  2. Vaya a la opción ‘Administrar’ en ‘Paquetes instalados’ SUGERENCIA: Entity Framework se agrega a Class Library, por lo que tendrá EntityFramework en ‘Paquetes instalados’ y verá ‘Manage’option’
  3. Haga clic en la opción ‘Administrar’ y compruebe para instalar el paquete en el proyecto que hace referencia a la biblioteca de clases que contiene el modelo EF (en mi caso establecí la checkbox para instalar el paquete en la aplicación de consola que tenía referencia a la biblioteca de clase que tenía el modelo EF adentro)

Eso es todo lo que tenía que hacer y todo funcionó perfecto.

Espero que haya ayudado.

También tuve un problema similar. Mi problema se resolvió haciendo lo siguiente:

enter image description here

enter image description here

Yo tengo el mismo error. Es extraño que solo ocurra cada vez que uso mi dbContext para consultar cualquiera de mis modelos u obtener su lista como:

 var results = _dbContext.MyModel.ToList(); 

Intentamos volver a instalar el Entity Framework, hacer referencia a él correctamente pero fue en vano.

Afortunadamente, tratamos de verificar las soluciones Nuget for ALL , luego actualizamos todo o nos aseguramos de que everything sea ​​la misma versión porque notamos que los dos proyectos tienen diferentes versiones de EF en el proyecto web. Y funciona. El error se ha ido.

Aquí está la captura de pantalla sobre cómo administrar Nuget para todas las soluciones:

enter image description here

El proyecto de inicio que hace referencia al proyecto donde se está utilizando Entity Framework necesita los dos ensamblados siguientes en su carpeta bin:

  • EntityFramework.dll
  • EntityFramework.SqlServer.dll

Agregar una

a las del archivo .config en el proyecto de inicio hace que el primer ensamblado esté disponible en ese directorio bin. Puede copiar esto desde el archivo .config de su proyecto Entity Framework:

   

Para hacer que el segundo .dll esté disponible en la carpeta bin, aunque no es práctico, se puede hacer una copia manual desde la carpeta bin del proyecto Entity Framework. Una mejor alternativa es agregar a los eventos posteriores a la comstackción del proyecto Entity Framework las siguientes líneas, que automatizarán el proceso:

 cd $(ProjectDir) xcopy /y bin\Debug\EntityFramework.SqlServer.dll ..\{PATH_TO_THE_PROJECT_THAT_NEEDS_THE_DLL}\bin\Debug\ 

Tuve un problema relacionado al migrar de un db CE a un servidor Sql en Azure. Solo perdí 4 horas tratando de resolver esto. Con suerte, esto puede salvar a alguien un destino similar. Para mí, tuve una referencia a SqlCE en mi archivo packages.config. Eliminarlo resolvió todo mi problema y me permitió usar migraciones. Yay Microsoft para otra tecnología con problemas de instalación y configuración innecesariamente complejos.

Tuve el mismo problema, solo copié el archivo de configuración de la aplicación del proyecto que contenía DBContext en mi proyecto de prueba

Tuve la misma excepción arrojada. yo incluí

 using System.Data; using System.Data.Entity; 

y todo ha vuelto a funcionar de nuevo …

Como el mensaje muestra que necesitamos agregar el proveedor System.Data.SqlClient es por eso que necesitamos instalar el paquete nuget de EntityFramework que tiene dos dll, pero si solo estamos desarrollando una aplicación de consola, solo necesitamos agregar la referencia de EntityFramework.SqlServer.dll

Nota: tuve este problema mientras generaba Database Sql from Model. Había creado todas las tablas bien pero no exportaría los cambios. Lo que necesita observar es que este error se genera cuando intenta exportar el sql utilizando la plantilla de generación DDL como SSDLtoSQL10. Se espera la conexión de MySQL aquí, así que asegúrese de seleccionar desde la plantilla de generación de DDL desplegable SSDLtoMySQL en las propiedades del modelo. Pasé un día entero en esto!

En mi caso, todo estaba funcionando correctamente y de repente dejé de funcionar porque creo que Resharper alteró algunos cambios que causaron el problema. Mi proyecto se dividió en la capa de datos, el servicio y la capa de presentación. Tenía el marco Entity instalado y referenciado en mi capa de datos, pero aún así el error no desapareció. Desinstalar y reinstalar tampoco funcionó. Finalmente, lo resolví convirtiendo la capa de datos en el proyecto de inicio, realizando la migración, actualizando la base de datos y cambiando el proyecto de inicio a mi capa de presentación .

Expanda el archivo YourModel.edmx y abra la clase YourModel.Context.cs en YourModel.Context.tt.

Agregué la siguiente línea en la sección de uso y el error fue reparado por mí.

utilizando SqlProviderServices = System.Data.Entity.SqlServer.SqlProviderServices;

Es posible que deba agregar esta línea al archivo cada vez que se genere automáticamente.