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?


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.


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.


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


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.


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


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.


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


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.


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.


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.



2

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


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).


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


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


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


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


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


1

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


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.


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


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.


1

1) Desinstalar Entity Framework de All proyectos

2) Reiniciar Visual Studio

3) Reinstalar en todos los proyectos requeridos

y empezó a funcionar


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.


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


0

puedes probar en la consola del administrador de paquetes

PM> EntityFrameWork \ enable-migrations


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


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;

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.