No se pudo encontrar el tipo o el nombre del espacio de nombres 'DbContext' [cerrado]

150

Soy MUY nuevo en ASP.NET MVC (3) y estoy teniendo dificultades para resolver un error de compilación en Visual Studio:

No se pudo encontrar el tipo o el nombre del espacio de nombres 'DbContext' (¿le falta una directiva de uso o una referencia de ensamblado?)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;

namespace MyProjectName.Models
{   
    public class MachineModel
    {
        // name
        [Required]
        [Display(Name = "Nom de la machine")]
        public string Name { get; set; }

        // IP
        [Required]
        [RegularExpression(@"(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)",
           ErrorMessage = "Donnez une adresse IPv4 valide.")]
        [Display(Name = "Adresse IP de la machine")]
        public string IP { get; set; }
    }

    public class MachineDbContext : DbContext
    {
        public DbSet<MachineModel> Machines{ get; set; }
    }
}

Los dos errores que obtengo son:

  • No se pudo encontrar el tipo o el nombre del espacio de nombres 'DbContext' (¿le falta una directiva de uso o una referencia de ensamblado?)
  • No se pudo encontrar el tipo o nombre de espacio de nombres 'DbSet' (¿falta una directiva de uso o una referencia de ensamblado?)

¿Qué me estoy perdiendo?

Chris
fuente
20
¿Agregaste la primera referencia del Código de Entity Framework usando NuGet? Esa podría ser la forma más fácil de resolver referencias.
Ed Chapel
2
ok - bajo el árbol del Explorador de soluciones hice clic derecho en Referencias -> Agregar referencia de paquete de biblioteca -> EFCodeFirst -> Instalar. ¿Es esto lo que estabas sugiriendo? Después de seguir estos pasos, todavía tengo el mismo problema.
Chris
Mientras tanto, actualicé las herramientas MVC 3 a la versión más nueva y creé un proyecto tutorial siguiendo asp.net/mvc/tutorials/getting-started-with-mvc3-part4-cs . En ese proyecto, no tengo este problema, pero no puedo hacer que DbContext sea aceptado en mi proyecto anterior, a pesar de las sugerencias hechas aquí y por Darin a continuación ...
Chris
VS2017, EF6, cierra la solución. Vuelva a abrir la solución. Ahora reconoce correctamente DbContext.
redwards510
1
Abra la consola del administrador de paquetes. Seleccione Herramientas> Administrador de paquetes NuGet> Consola del Administrador de paquetes. En la consola de Package Manager, ingrese el siguiente comando: install-package EntityFramework
Zahid Hasan

Respuestas:

200

Tuve el mismo problema. Resulta que necesita la referencia EntityFramework.dll (y no System.Data.Entity).

Acabo de sacarlo de la aplicación MvcMusicStore que puede descargar de: http://mvcmusicstore.codeplex.com/

También es un ejemplo útil de cómo usar el framework de entidad primero en código con MVC.

Shaz
fuente
77
esta fue mi experiencia; EntityFramework.dll para 4.2.0.0 no estaba presente a pesar de que vs2010 Package Manager afirmó que tenía 4.2.0.0 instalado. Con mi proyecto abierto en vs2010, la ejecución del comando de instalación a través de Herramientas, Library Package Manager, Package Manager Console agregó la referencia a EntityFramework automáticamente y mi posterior construcción tuvo éxito. gracias @Shahzad!
gerryLowry
77
Gracias por tu ayuda. ¡Espero que Microsoft algún día facilite la instalación de su propio software en sus ventanas! Es sorprendente la cantidad de lugares a los que uno tiene que ir para saber qué se necesita y cómo encajan todos. NuGet, MS Sitio de descarga, tableros de mensajes, libros, ... tiempo muy productivo.
No,
23
Su mejor opción es usar NuGet (administrador de paquetes) para atraer Entity Framework (et al) a sus proyectos.
kingdango
2
Algunas veces necesita reiniciar Visual Studio para que la instalación funcione. Este fue mi caso.
Beduino
3
Abra Package Manager Console y péguelo en: Install-Package EntityFramework
user2862542
71

System.Data.EntityDebe hacer referencia al ensamblaje a su proyecto o instalar el EntityFrameworkpaquete NuGet que configurará todo por usted.

Darin Dimitrov
fuente
1
Darin, ¿podrías explicar cómo se haría esto?
Chris
11
@ Chris Dickinson, haga clic derecho sobre el Referenceselemento en el proyecto y seleccione Add Reference.... Luego, en la .NETpestaña, seleccione System.Data.Entity. Y si desea usar NuGet, haga clic derecho en el Referenceselemento y luego seleccione Add Library Package Reference...y en la pestaña En línea, busque EntityFramework.
Darin Dimitrov
1
Seguí tus dos pasos, pero el problema aún persiste ...
Chris
3
¿usó NuGet para instalar EntityFramework? Crea una carpeta "paquetes" junto a su directorio de Soluciones. Encontrará la carpeta "EntityFramework.4.1.10331.0" dentro de ella. Dentro de la carpeta "Libs" encontrará "EntityFramework.dll". Agregue referencia a ella usando la pestaña Examinar y seleccione el dll anterior. mira mi respuesta a continuación ... hice lo mismo.
Amitd el
77
Seleccioné TOOLS > Library Package Manager > Package Manager Consoleen VS2012 y escribí install-package EntityFrameworken el indicador. Funcionó perfectamente.
Peter Gluck
17

Solo una nota rapida. Es DbContext, no DBContext. es decir, con una 'B' minúscula. Descubrí esto porque tenía el mismo problema mientras intelesense no funcionaba hasta que intenté escribir el espacio de nombre completo System.Data.Entity ... y name y finalmente sugirió la opción en minúscula 'b':

System.Data.Entity.DbContext

John Thompson
fuente
1
He estado revisando todas las referencias sobre System.Data.Entity solo para descubrir que el problema era la "B" mayúscula. +1
F0r3v3r-A-N00b
Sí, esto lo resolvió. Se realizó el paso "Instalar-Paquete EntityFramework". Gracias +1.
Paceman
9

Tuve el mismo problema usando VS2010. Sé que esto no es realmente una respuesta. Solo pensé que podría ayudar a alguien. Lo resolví usando el nombre completo para DBContext.

En vez de

public class MachineDbContext : DbContext

solía

public class MachineDbContext : System.Data.Entity.DbContext

y reconstruido el proyecto. De repente, VS estaba contento e incluso pude eliminar el nombre completo y usar DBContext.

cabina0
fuente
nombre completo ... ¿cómo puedo olvidar agregar usando la directiva ...?
código x
8

Tuve el mismo problema ... Instalar EF desde Package Manager Console funcionó para mí

el comando fue: Install-Package EntityFramework

Felipe Skinner
fuente
4

Si su compilador no reconoce

  • System.Data.Entity.Infrastructure
  • DbContext
  • DbSet
  • et alii,

asegurarse

  1. tiene Entity Framework 4.1 instalado en su máquina;
  2. en su archivo .csproj, tiene la siguiente referencia

    <Reference Include = "EntityFramework, Version = 4.1.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089, processorArchitecture = MSIL" />
    

    dentro del elemento

    <ItemGroup>
      ...
    </ItemGroup>
    

    que alberga referencias a otras asambleas.

usuario669226
fuente
4

Tuve el mismo problema ... Tengo VS2010 express ...

(Nota: si ve este problema, intente verificar las referencias a EntityFramework.dll ... Puede que falte).

Lo siguiente lo resolvió por mí.

Instalé la última actualización de herramientas MVC 3 y
luego instalé EntityFramework 4.1
o utilicé NUGet, es decir. desde con Visual Studio 2010 Express (Herramientas-> Administrador de paquetes de biblioteca -> Agregar referencia de paquete de biblioteca -> Seleccionar en línea -> EntityFramework)

Extrañamente, eso no funcionó ... Así que tuve que agregar manualmente una referencia a "EntityFramework.dll".
Intente hacer una búsqueda para el archivo dll ... puede estar aquí
"C: \ Archivos de programa (x86) \ Assemblies de referencia \ Microsoft \ Framework.NETFramework \ v4.0 \ "

Si ya lo tiene ... simplemente agregue una referencia '.net'.

Nota: Si usa NuGet, crea una carpeta "paquetes" junto a su directorio de Soluciones. Encontrará la carpeta "EntityFramework.4.1.10331.0" dentro de ella. Dentro de la carpeta "Libs" encontrará "EntityFramework.dll".
Agregue referencia usando la pestaña Examinar y seleccione el dll anterior.

Snap por lo mismo

Amitd
fuente
4

Estoy usando Visual Studio 2010 express y agrego una referencia para C:\Program Files\Microsoft ADO.NET Entity Framework 4.1\Binaries\EntityFramework.dllresolver el problema.

CENIZAR
fuente
4

Esto ayuda realmente útil:

  1. Seleccione el proyecto ProjectNAme en el Explorador de soluciones.
  2. En el menú Herramientas, elija Library Package Manager, que tiene un submenú.
  3. En el submenú, elija Package Manager Console.
  4. En el indicador PM de la consola, escriba install-package EntityFramework y luego presione enter.
BehranG BinA
fuente
3

Su proyecto no puede resolver las clases EntityFramework hasta que no lo haya agregado en su proyecto. Para agregar compatibilidad con EntityFramework, debe seguir estos pasos: Herramientas-> Administrador de paquetes Nuget -> Administrar paquete Nuget para la solución Examinar EntityFramework Muestra la última versión estable de EntityFramework. actualmente 6.1.3 es la última versión Instalarlo para el proyecto seleccionado.

Shubham Tiwari
fuente
2

Visual Studio Express SP1 Haga clic derecho en el Explorador de soluciones> Referencias> Agregar referencia de paquete de biblioteca> EntityFramework

mesteru_vali
fuente
2

Utilice CTP5 en su lugar, es una versión más nueva con algunos cambios en la API. Debe agregar una referencia a EntityFramework.dll que está instalado en el directorio CTP; el valor predeterminado es: c: \ Archivos de programa \ Microsoft ADO.NET Entity Framework Feature CTP5 \ Binaries \ EntityFramework.dll para el sistema de 32 bits. En el sistema de 64 bits, se colocará en Archivos de programa (x86).

Juan
fuente
2

Esto me sucedió cuando ramifiqué el código. Para solucionarlo, hice clic con el botón derecho en mi proyecto en Visual Studio, elegí administrar paquetes de Nu-get, desinstalé EntityFramework y luego lo reinstalé. Problema resuelto

Neil
fuente
2

Acabo de tener este problema y ninguna de las otras soluciones funcionó para mí. Estoy usando Visual Studio 2010 y tengo dos proyectos en mi solución: UIProject y DataAccessProject. El UIProject tiene una referencia al DataAccessProject.

Mi UIProject apuntaba a .Net Framework 4 pero mi DataAccessProject apuntaba a .Net Framework 3.5 por alguna razón.

  • Cambié ambos proyectos para apuntar a .Net Framework 4
  • Desinstale y vuelva a instalar el paquete Entity Framework NuGet.

Problemas resueltos. Ahora tengo referencias a EntityFramework y System.Data.Entity

MoMo
fuente
2

Tuve el mismo problema. Tuve que volver a escribir "DBContext" después de agregar una referencia al marco de entidad y resolvió el problema.
significa que Visual Studio no pudo reconocer la clase automáticamente y esperó a que se volviera a escribir. así que es mejor agregar referencia primero y luego implementar código. VS 2013 - último uso


fuente
2

Primero tuve que desinstalar EntityFramework (Desinstalar-paquete EntityFramework (aparentemente no distingue entre mayúsculas y minúsculas)), luego instalarlo nuevamente (Instalar-paquete EntityFramework), a través de la Consola PM

Mpilo Z
fuente
1

Tuve este problema, leí la respuesta anterior y descargué el entityframework.ddl pero descubrí que ya está referenciado. Entonces agregué el espacio de nombres y el problema fue resuelto

usando System.Data.Entity;

Estoy usando Visual Studio 2010, SP1 instalado

Muhammad Waqas Iqbal
fuente
1

habiendo hecho referencia a entityframework.dll, ambos system.data.entity funcionaron.

meol
fuente
1

Tuve el mismo error pero el problema fue solo un problema accidental con mi modelo.

Accidentalmente puse ...

public class MyModelDBContext : Context
{
 public DBSet<MyModel> MyModels { get; set; }
}

... dentro de la clase de modelo.

Jason Geiger
fuente
1
¿Esas 3 líneas realmente dentro de la clase?
Nate-Wilkins
1

Como forma alternativa, puede ir AQUÍ : instrucciones sobre cómo instalar cualquier dll requerido.

O puede descargar NuGet y administrarlo desde VS

gbk
fuente
1

Haga clic con el botón derecho en su referencia y vaya a administrar los paquetes NuGet, luego elija en línea todo, luego la fuente del paquete NuGet en el cuadro de texto de búsqueda tipo Entity Framework e instálelo.

kidistB
fuente
1

1) Desinstalar Entity Framework de All proyectos

2) Reiniciar Visual Studio

3) Reinstalar en todos los proyectos requeridos

y empezó a funcionar

Moji
fuente
1

Puede haber un caso en el que hace referencia a todo lo que necesita e incluso puede ir a la definición presionando F12 en la clase DbContext que lo lleva al espacio de nombres System.Data.Entity pero aún recibe esta desagradable advertencia del compilador. Asegúrese de que el Marco de destino de su proyecto y el de la versión de Entity Framework que está utilizando coincidan. Vaya a Proyecto-> Propiedades-> Pestaña Aplicación. Cambie el Marco de destino (no puedo decir exactamente a cuál, la prueba y el error ayudarán). Solo mis dos centavos.

Mikayil Abdullayev
fuente
1

También me irrito por este problema muchas veces y finalmente encuentro la solución. Vaya al archivo edmx-> Actualizar modelo de la base de datos-> Actualizar-> Finalizar. Solución limpia-> Reconstruir solución

Aayush Verma
fuente
0

puedes probar en la consola del administrador de paquetes

PM> EntityFrameWork \ enable-migrations

Michael felina
fuente
0

Como los otros han sugerido:

  1. Agregue las referencias y directivas correctas. ¿Pero todavía no funciona? Quizás tengas el mismo problema que yo:

Eche un vistazo a continuación y vea si puede decirme qué está mal:

public class PanelLengthContext : DBContext { } ??!

¡Asegúrese de que el nombre de la clase no esté mal escrito - (mayúsculas y minúsculas)!

  • DbContext Es la ortografía correcta.
  • así es como debería verse:
  • revisar la ortografía. No pierdas 20 minutos de tu vida como lo hice yo.public class PanelLengthContext : DbContext {}

HTH

BKSpurgeon
fuente
0

Tengo el mismo problema que usted, no puedo implementarlo en la clase Controlador mientras funciona cuando lo pongo en la clase modelo. Agregue estos códigos en la parte superior de su clase de controlador

 using TimeSheetManagementSystem.Data;
 using Microsoft.Extensions.Configuration;
 using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
 using Microsoft.EntityFrameworkCore;
 using Newtonsoft.Json;
JApple
fuente
0

Me he enfrentado al mismo problema y luego he agregado el espacio de nombres

using Practiceusingentityframework.Models;

Después de agregar está funcionando bien

Prueba esto puede ayudarte a resolver tu problema

y antes de eso instale el marco de la entidad desde Nuget Manager

Aravindhan R
fuente