No se encontró un proveedor de Entity Framework para el proveedor ADO.NET con el nombre invariable 'System.Data.SqlClient'

543

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

No se encontró un 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.

ingrese la descripción de la imagen aquí

Fernando Vellozo
fuente
Yo uso EF5 sin el providersy provider, por lo tanto, considere eliminarlo?
ta.speot.is
1
pon una copia de tu cadena de conexión aquí
pylover
La cadena de conexión está en la imagen (App.confing), por cierto es muy simple, llamo al constructor public BaseStorage(): base ("RaptorDB") {}, BaseStorage () hereda de DbContext en EF5 todo funcionó perfectamente, no ya en EF6.
Fernando Vellozo
10
El problema se resolverá instalando EF6, el segundo proyecto (Consola), ¡gracias a todos los que ayudaron de alguna manera!
Fernando Vellozo
3
Para mí, esto parece ser causado por Visual Studio al no darse cuenta de que el ensamblaje EntityFramework.SqlServer fue realmente utilizado por el proyecto base. Si hace algo como la respuesta de @ Carra , no tiene que agregar EF a cada proyecto que haga referencia a su proyecto base, mucho más limpio.
tehDorf

Respuestas:

608

Acabo de tener el mismo problema y parece que EntityFramework aunque instalado 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
douglaslps
fuente
34
PMC escribió que 'EntityFramework 6.0.1' ya estaba instalado, pero lo agregó a mi aplicación de consola (que realmente NO está usando EF), pero también me sirvió. Elimino EF de las referencias de la aplicación de consola, devuelve el error, no entiendo esto: mi aplicación de consola está utilizando un proyecto de repositorio (que usa EF) ¡Gracias por la ayuda!
Prokurors
33
¡No olvide agregar -ProjectName <ProjectName> a la línea de comando si tiene varios proyectos en su solución ... !!!
Eugenio Miró
1
Usando la -Preopción tell nuget para instalar paquetes de prelanzamiento. No recomiendo usarlo. Tengo un error similar pero la solución fue simplemente instalar EntityFramework en el proyecto host. Lo instalé en una biblioteca de clase pero no en el proyecto principal (web / consola / o lo que sea),
Davide Icardi
10
El mismo problema aqui. Tenía un proyecto que no tenía una referencia a EF pero el dll de EF estaba en la carpeta Debug. Ejecutar este comando contra este proyecto agregado EntityFramework.SqlServer.dlla la carpeta Debug - problema resuelto.
Qujck
44
En mi situación, este error no se presentó hasta que implementé el proyecto en nuestro servidor de prueba. De hecho, fue EntityFramework.SqlServer.dll lo que faltaba y la instalación de EF a través del administrador de paquetes funcionó. Simplemente agregó las dos referencias relevantes al proyecto y luego agregó la configuración de la entidadFramework a web.config. Supongo que el IIS local pudo obtener el ensamblado localmente, pero el IIS completo en el servidor web no pudo debido a los permisos.
Atters
384

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

Clément Picou
fuente
248
Esta es una respuesta absolutamente ridícula. ¿Por qué demonios necesitaría hacer eso? ¿Y sabes lo que es aún más ridículo? Funciona.
Robert
19
Vea mi respuesta a continuación, no necesita instalar EF en su aplicación de consola.
Francisco Goldenstein
77
Tu respuesta es correcta. Solo agregue la referencia EntityFramework.SqlServer.dll al proyecto de interfaz que usa una biblioteca con EF, solucione el problema. Así que no use este EF (solo la DLL)
harveyt
31
No tiene que agregar una referencia a EF en la consola / aplicación web. Solo necesita asegurarse de que EntityFramework.SqlServer.dllse esté copiando en el directorio bin. Agregar una referencia fuerte podría romper su arquitectura (si construyó varios niveles, su ensamblaje de ejecución de nivel superior ni siquiera debería saber sobre EF). En su lugar, puede asegurarse de que se copia el proveedor de SQL Server. Ver por ejemplo stackoverflow.com/a/19130718/870604
ken2k
3
Sospecho que la razón por la que EntityFramework.SqlServer.dll no se detecta como una dependencia es porque Entity Framework lo carga dinámicamente. ¿Cómo se supone que debe saber su proyecto para copiar sobre el proveedor de SQL cuando la única referencia a él está en el archivo de configuración?
Joel McBeth el
209

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 desde el proyecto Biblioteca de clases que usa Entity Framework a una carpeta LIB y agregarle una referencia.

En resumen:

  • Aplicación de biblioteca de clases:
    • Instalar el marco de la entidad
    • Escribe tu 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.

Francisco Goldenstein
fuente
18
Respuesta correcta. NO es necesario instalar EF. EntityFramework.SqlServer.dll.
Tom Stickel
15
Tengo que estar de acuerdo. Esta es completamente la respuesta correcta. Haga referencia a un dll que sea 1/2 mb o extraiga el proyecto EF nuget que es> 5.5 mb. Reduce un poco el valor de la arquitectura de múltiples niveles también. Mal show de MS realmente: tengo 4 niveles y mi nivel superior realmente no debería tener ninguna razón para saber nada sobre EF
72GM
18
Todavía ridículo de todos modos. Por ejemplo, ¿por qué un front end necesitaría una referencia a SqlServer? El front end no podría importarme menos, en mi caso. Pero funciona. +1
Mike de Klerk
2
Esto fue útil. Muchas gracias.
peter_the_oak
1
¿Esto no dificultará la actualización de versiones de EntityFramework? Tendrías que recordar ir y actualizar la referencia a la DLL
aplastar
114

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

Parece ser un archivo recién agregado en EF6. Inicialmente no lo había incluido en mi módulo de combinación y me encontré con el problema enumerado aquí.

Miguel
fuente
77
Me encontré con este problema cuando anteriormente tenía un proyecto (a) con una referencia a un proyecto (b) que tenía una referencia a EF. Después de limpiar y eliminar la carpeta bin del proyecto (a), luego de reconstruir, se encontró la referencia EF, pero no EF.SqlServer.dll. Copiar esto en manual funcionó para mí
dan richardson
2
@dan richardson gracias por mencionar 'eliminar carpeta bin'.
Rajshekar Reddy
Obtuve el error al intentar ejecutar un script LINQPad después de una actualización EF6. Incluso hacer referencia a EntityFramework.SqlServer.dll en LINQPad no lo solucionó HASTA que reconstruyera mi solución en VS2013. ¡La nueva referencia se resolvió correctamente en LINQPad y mi script se ejecutó!
Chris
En mi caso, estaba bien en el entorno del desarrollador, pero cuando publiqué aparece el problema mencionado. Después de comparar la lista de bibliotecas en dev con la carpeta bin en el servidor, noté la ausencia de EntityFramework.SqlServer.dll, solo para cargarlo y actualizar la aplicación, y listo.
Henry Rodriguez
Este fue el problema para mí, ¡gracias! Vea la solución limpia de @Anders para evitar problemas que olviden incluir la DLL en cada proyecto requerido.
SharpC
54

En lugar de agregar EntityFramework.SqlServer al proyecto anfitrión, puede garantizar una referencia estática desde su proyecto 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 compilación incluya el ensamblaje con el proyecto host.

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

Anders
fuente
55
Creo que esta es una solución agradable y limpia en la que no tenemos que incluir referencias a archivos DLL relacionados con la persistencia en proyectos que deberían ser independientes de la persistencia.
JTech
3
De acuerdo, y se aplica a cualquier biblioteca con dependencias implícitas, no solo persistencia
Anders
3
Cuando tiene una dependencia explícita de un tipo en un ensamblaje, el proceso de compilación lo copiará. Sin embargo, aquí no tiene una dependencia explícita y el proceso de compilación no podrá copiar el ensamblado en la carpeta de compilación. Mi código solo se asegura de que exista una referencia explícita a cualquier tipo en dicho ensamblaje.
Anders
2
Sin él no hay una dependencia explícita del ensamblado de su código y no se copiará a la salida
Anders
2
Esto es brillante.
Kris
48

Cuando instala Entity Framework 6 a través Nuget. EntityFramework.SqlServer a veces falta para otro ejecutable. Simplemente agregue el Nugetpaquete a ese proyecto.

A veces lo anterior no funciona para el Proyecto de prueba

Para resolver este problema en Test Project, simplemente coloque este Método dentro de Test Project:

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

Este método nunca se ha llamado, pero como mis observaciones, el compilador eliminará todos los ensamblajes "innecesarios" y sin usar las EntityFramework.SqlServercosas, la prueba falla.

Umar Abbas
fuente
2
Bueno, esto no es bonito, pero solucionó el problema que tenía en mi proyecto de prueba. Ninguna de las otras soluciones funcionó.
Honorable Chow
En mi caso, fue suficiente agregar el Entity Framework también a mi proyecto de prueba en "Administrar paquetes Nuget para la solución"
Juha Palomäki
En realidad, debe ingresar a cualquier proyecto (no solo prueba) para asegurarse de que System.Data.Entity.SqlServer se incluirá en el "conjunto de lib de resultados" después de la compilación (nota: Unity u otra herramienta IoC podría cambiar esta regla y usted necesita llamar a este código desde el proyecto de prueba).
Roman Pokrovskij
Esta es realmente la mejor solución, porque no tiene que rociar referencias del marco de la entidad en todas partes de su proyecto.
Daniel Lobo
Esto me indicó la dirección correcta. Se EntityFramework.SqlServeragrega a su biblioteca de clases, pero si no se usa, no se colocará dentro de la carpeta de salida de su aplicación. Solucioné el problema agregando un ExecutionStrategy, que todavía tenía que hacer, por lo que agregar una línea como SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());dentro de una DbConfigurationclase solucionó el problema.
Jan_V
24

Agregar esta función

private void FixEfProviderServicesProblem()

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

namespace a.b.c
{
    using System.Data.Entity;

    public partial class WorkflowDBContext : DbContext
    {
        public WorkflowDBContext()
            : base("name=WorkflowDBConnStr")
        {
        }

        public virtual DbSet<WorkflowDefinition> WorkflowDefinitions { get; set; }
        public virtual DbSet<WorkflowInstance> WorkflowInstances { get; set; }
        public virtual DbSet<EngineAlert> EngineAlerts { get; set; }
        public virtual DbSet<AsyncWaitItem> AsyncWaitItems { get; set; }
        public virtual DbSet<TaskItem> TaskItems { get; set; }
        public virtual DbSet<TaskItemLink> 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;
        }
    }
}

.

Johannes
fuente
lamento tratar de revocarlo ... ya que no pensé que funcionaría ... ¡y lo hace! ... dice que no puedo cambiar mi voto, a menos que se edite la respuesta, porque ha sido demasiado tiempo y desde entonces ha sido bloqueado ...
Seabizkit
Esto también funcionó para mí. Tenemos un proyecto de biblioteca que usa EF 6, y una aplicación de consola que usa la biblioteca. Recibimos la misma excepción que el OP. No deseamos colocar la configuración específica de EntityFramework en el archivo de configuración de la aplicación, por lo que este método funcionó para nosotros. Gracias
Rob
1
¿Dónde llamas FixEfProviderServicesProblem? Intenté en el constructor, sin suerte.
Francis Ducharme
1
Nunca lo llamo, no tengo que hacerlo. El hecho de que esté allí hace que .net piense que es necesario e incluye el EntityFramwork como dependencia.
Johannes
Probablemente de stackoverflow.com/a/19130718/1467396 ? Pero +1, de todos modos, por la claridad en cómo / dónde usarlo.
David
20

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

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

private volatile Type _dependency;

public MyClass()
{
    _dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}
Carra
fuente
2
¡Esta! No es necesario agregar una referencia a otros proyectos que puedan hacer referencia a este ensamblado.
tehDorf
8

Recibí 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. La ejecución de los comandos de proveedor respectivos como paquetes nuget en Package Manager Console podría resolver el problema, ya que también los paquetes NuGet agregarán automáticamente registros al archivo de configuración. Corrí PM> Install-Package EntityFramework.SqlServerCompactpara resolver el problema.

MaySara
fuente
2
¡Estoy realmente sorprendido de que nadie haya votado por esto hasta ahora! El mensaje de error indica claramente: la razón del error es que después de la actualización de EF, ¡realmente no queda ninguna definición de proveedor para el SQL Compact en el archivo web.config de la aplicación! Agregar el paquete que menciona corrige el archivo web.config, y habrá un proveedor definido.
Csaba Toth
1
simplemente salvavidas. Debe ser marcado como respuesta, ya que proporciona claramente solución al problema
ZafarYousafi
7

Hoy me encontré con este problema al trabajar con un conjunto de servicios web, cada uno en proyectos diferentes, y un proyecto separado que contiene pruebas de integración para algunos de esos servicios.

He estado usando esta configuración durante algún 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, a pesar de que no se usa allí (más o menos como lo señaló anteriormente el usuario 3004275 ).

Indicaciones que enfrenta el mismo problema:

  • Las llamadas directamente a EF (conectarse a una base de datos, obtener datos, etc.) funcionan bien, siempre que se inicien desde un proyecto que tenga referencias a EF6.
  • 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 use en ese proyecto en sí; solo internamente en el proyecto llamado

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

Kjartan
fuente
7

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

[DeploymentItem("EntityFramework.SqlServer.dll")]
Alberto Juan
fuente
Es bastante bonito, pero genera más trabajo y es más fácil de olvidar. Con el truco de "referencia forzada", solo necesita hacerlo en los proyectos que realmente necesitan usar EF.
Charles Roberto Canato
7

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

  • EntityFramework.dll
  • EntityFramework.SqlServer.dll

Adición de una <section>a la <configSections>del archivo .config en el proyecto de inicio hace que el primer montaje disponible en ese directorio bin. Puede copiar esto desde el archivo .config de su proyecto Entity Framework:

<configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>

Para que el segundo .dll esté disponible en la carpeta bin, aunque no sea práctico, se puede hacer una copia manual de la carpeta bin del proyecto Entity Framework. Una mejor alternativa es agregar a los eventos posteriores a la compilació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\
Leonel B.
fuente
2
Gracias, tengo Entity Framework en una capa de datos, por lo que está aislado, pero es desafortunado que Microsoft no nos permita aislar verdaderamente la capa de datos y nos haga contaminar el ux con una tecnología de base de datos. Esperaba no tener que hacer eso.
Matt
4

Hoy me encuentro con este problema. Tengo una biblioteca de clases de repositorio de datos con el paquete EF63 NuGet y la aplicación de consola para pruebas, que solo hacen referencia al proyecto de biblioteca de clases. Creé un comando posterior a la compilación muy simple, que copia EntityFramework.SqlServer.dll de la carpeta Bin \ Debug de la biblioteca de clases a la carpeta Bin \ Debug de la aplicación de consola y el problema se resolvió. No olvide agregar la sección entityFramework al archivo .config de la aplicación de consola.

Ondřej
fuente
4

Agregue a continuación a su app.config.

 <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
Taran
fuente
También debe registrarlo en <configSections>-<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
TryingToImprove
Esto es lo que hace "IInstall-Package EntityFramework". Esto no es realmente necesario porque EntityFramework de forma predeterminada intenta cargar EntityFramework.SqlServer.dll para el nombre invariante de SqlClient. Este método puede usarse para sustituir al proveedor.
user1295211
3

Eliminar la carpeta BIN lo hizo por mí

David
fuente
3

Debe forzar una referencia estática al ensamblaje EntityFramework.SqlServer.dll , pero en lugar de poner un código ficticio, puede hacerlo de una manera más bella:

  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 usar EF):

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

Acabo de reinstalar 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á.

Kuntal Ghosh
fuente
¡Una explicación estaría bien! ¿Por qué usted tiene que volver a instalarlo y así sucesivamente
Rizier123
1
Debido a que por alguna razón desconocida, los cambios no tendrán efecto y, por lo tanto, reinstalé EntityFramework 6.1.1 y después de eso surtirá efecto.
Kuntal Ghosh
2

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 corregido para mí.

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

Puede que tenga que agregar esta línea al archivo cada vez que el archivo se genera automáticamente.

usuario2347528
fuente
2

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

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

BehrouzMoslem
fuente
2

parece que nadie mencionó primero verificar si System.Data.SqlClient está instalado en el sistema y si se hace referencia a él.

Resolví mi problema instalando System.Data.SqlClient y agregando un nuevo proveedor en la aplicación.

<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6"/>
Tobi Owolawi
fuente
1

Además, asegúrese de que su proyecto de inicio es 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 todas las configuraciones necesarias.

usuario2588362
fuente
1

Intenté casi todo lo anterior y nada funcionó.

Sólo cuando me puse los archivos DLL que se hace referencia en el defecto del proyecto EntityFrameworky EntityFramework.SqlServerpropiedades Copy Locala Truequé se comience a trabajar!

SharpC
fuente
1

todo el mundo necesito su atención que dos dll EntityFramework.dll y EntityFramework.SqlServer.dll son DataAccess layer Library y no es lógico usarlos a la vista ni en ninguna otra capa. Resuelve su problema pero no es lógico.

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

Vahid Akbari
fuente
1

Tenía una aplicación de consola y una biblioteca de clase. En la biblioteca de clases, creé el Modelo de datos de entidad (haga clic con el botón derecho en Biblioteca de clase> Agregar> Nuevo elemento> Datos> Modelo de datos de entidad ADO.NET 6.0) y coloque la referencia dentro de la aplicación de consola. Entonces, tiene una aplicación de consola que hace referencia a la biblioteca de clases y dentro de la biblioteca de clases tiene el modelo EF. Tuve el mismo error cuando intenté obtener algunos registros de la tabla.

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 la Biblioteca de clases, por lo que tendrá EntityFramework en 'Paquetes instalados' y verá la opción 'Administrar'
  3. Haga clic en la opción 'Administrar' y marque para instalar el paquete al proyecto que tiene referencia a la biblioteca de clases que contiene el modelo EF (en mi caso configuré la casilla de verificación para instalar el paquete en la aplicación de consola que tenía referencia a la biblioteca de clases que tenía el modelo EF dentro)

Eso fue todo lo que tuve que hacer y todo funcionó a la perfección.

Espero que haya ayudado.

dkkd
fuente
1

Yo tengo el mismo error. Es extraño que solo suceda cuando use mi dbContext para consultar a cualquiera de mis modelos u obtener su lista como:

var results = _dbContext.MyModel.ToList();

Intentamos reinstalar Entity Framework, hacer referencia a él correctamente pero fue en vano.

Afortunadamente, intentamos buscar ALLsoluciones en Nuget , luego actualizar todo o asegurarnoseverything 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:

ingrese la descripción de la imagen aquí

Willy David Jr
fuente
1

Simplemente falta una referencia a EntityFramework.SqlServer.dll. Para proyectos de EntityFramework que utilizan SQL Server, los dos archivos que debe consultar son EntityFramework.SqlServer.dll y EntityFramework.dll

usuario2956314
fuente
0

Tuve un problema relacionado al migrar de una base de datos CE a Sql Server en Azure. Solo desperdicié 4 horas tratando de resolver esto. Esperemos que esto pueda salvar a alguien un destino similar. Para mí, tenía 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 configuración y configuración innecesariamente complejos.

usuario2662643
fuente
0

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

Stephen Ebichondo
fuente
0

Tuve la misma excepción lanzada. yo incluí

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

y todo vuelve a funcionar de nuevo ...

Kneeerunjun
fuente
0

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 estamos desarrollando solo una aplicación de consola, entonces solo necesitamos agregar la referencia de EntityFramework.SqlServer.dll

Sandeep Shekhawat
fuente