Le type ou le nom d'espace de noms 'DbContext' est introuvable [fermé]


150

Je suis TRÈS nouveau sur ASP.NET MVC (3) et j'ai du mal à résoudre une erreur de génération dans Visual Studio:

Le type ou le nom de l'espace de noms 'DbContext' est introuvable (vous manque une directive using ou une référence d'assembly?)

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; }
    }
}

Les deux erreurs que je reçois sont:

  • Le type ou le nom de l'espace de noms 'DbContext' est introuvable (vous manque une directive using ou une référence d'assembly?)
  • Le type ou le nom d'espace de noms 'DbSet' est introuvable (vous manque une directive using ou une référence d'assembly?)

Qu'est-ce que je rate?


20
Avez-vous ajouté la référence Entity Framework Code First à l'aide de NuGet? Cela pourrait être le moyen le plus simple de résoudre les références.
Ed Chapel

2
ok - sous l'arborescence de l'Explorateur de solutions, j'ai fait un clic droit sur Références -> Ajouter une référence de package de bibliothèque -> EFCodeFirst -> Installer. Est-ce ce que vous proposiez? Après avoir suivi ces étapes, j'ai toujours le même problème.
Chris

J'ai entre-temps mis à jour les outils MVC 3 vers la dernière version et créé un projet de didacticiel suivant asp.net/mvc/tutorials/getting-started-with-mvc3-part4-cs . Dans ce projet, je n'ai pas ce problème, mais je ne peux pas faire accepter DbContext dans mon ancien projet, malgré les suggestions faites ici et par Darin ci-dessous ...
Chris

VS2017, EF6, fermez la solution. Rouvrir la solution. Il reconnaît désormais correctement DbContext.
redwards510

1
Ouvrez la console du gestionnaire de packages. Sélectionnez Outils> Gestionnaire de package NuGet> Console du gestionnaire de package. Dans la console du gestionnaire de packages, entrez la commande suivante: install-package EntityFramework
Zahid Hasan

Réponses:


200

J'ai eu le même problème. Il s'avère que vous avez besoin de la référence EntityFramework.dll (et non de System.Data.Entity).

Je viens de le retirer de l'application MvcMusicStore que vous pouvez télécharger à partir de: http://mvcmusicstore.codeplex.com/

C'est également un exemple utile de la façon d'utiliser d'abord le code du framework d'entité avec MVC.


7
c'était mon expérience; le EntityFramework.dll pour 4.2.0.0 n'était pas présent même si le gestionnaire de package vs2010 affirmait que j'avais 4.2.0.0 installé. Avec mon projet ouvert dans vs2010, l'exécution de la commande d'installation via Tools, Library Package Manager, Package Manager Console a ajouté automatiquement la référence à EntityFramework et ma construction ultérieure a réussi. thnx @Shahzad!
gerryLowry

7
Merci de votre aide. J'espère que Microsoft facilitera un jour l'installation de son propre logiciel sur ses fenêtres! Il est étonnant de voir combien d'endroits il faut aller pour déterminer ce dont on a besoin et comment ils s'articulent tous ensemble. NuGet, site de téléchargement MS, babillards électroniques, livres, .... temps très productif en effet.
NoChance

23
Votre meilleur pari est d'utiliser NuGet (gestionnaire de packages) pour intégrer Entity Framework (et al) dans vos projets.
kingdango

2
parfois, vous devez redémarrer Visual Studio pour que l'installation fonctionne. c'était mon cas.
Bédouin le

3
Ouvrez la console du gestionnaire de package et collez-le dans: Install-Package EntityFramework
user2862542

71

Vous devez référencer System.Data.Entityassebmly à votre projet ou installer le EntityFrameworkpackage NuGet qui configurera tout pour vous.


1
Darin, pouvez-vous expliquer comment on ferait ça?
Chris

11
@Chris Dickinson, faites un clic droit sur l' Referencesélément dans le projet et sélectionnez Add Reference.... Puis dans l' .NETonglet, sélectionnez System.Data.Entity. Et si vous souhaitez utiliser NuGet, cliquez avec le bouton droit sur l' Referencesélément, puis sélectionnez Add Library Package Reference...et dans l'onglet En ligne, recherchez EntityFramework.
Darin Dimitrov le

1
J'ai suivi vos deux étapes, mais le problème persiste toujours ...
Chris

3
avez-vous utilisé NuGet pour installer EntityFramework? Il crée un dossier «packages» à côté de votre répertoire Solution. Vous trouverez le dossier «EntityFramework.4.1.10331.0» à l'intérieur. Dans le dossier «Libs», vous trouverez «EntityFramework.dll». Ajoutez-y une référence en utilisant l'onglet Parcourir et sélectionnez la DLL ci-dessus. voir ma réponse ci-dessous .. j'ai fait la même chose.
Amitd

7
J'ai sélectionné TOOLS > Library Package Manager > Package Manager Consoledans VS2012 et tapé install-package EntityFrameworkà l'invite. A parfaitement fonctionné.
Peter Gluck

17

Juste un petit mot. Il s'agit de DbContext et non de DBContext. c'est-à-dire avec un «B» minuscule. J'ai découvert cela parce que j'avais le même problème alors qu'intelesense ne fonctionnait pas jusqu'à ce que j'essaye de taper l'espace de nom complet System.Data.Entity ... et le nom et finalement il a suggéré l'option 'b' minuscule: -

System.Data.Entity.DbContext


1
J'ai parcouru toutes les références concernant System.Data.Entity uniquement pour découvrir que le problème était la majuscule "B". +1
F0r3v3r-A-N00b

Oui, cela l'a résolu. Si l'étape "Install-Package EntityFramework" a été effectuée. Merci, +1.
Paceman

9

J'ai eu le même problème avec VS2010. Je sais que ce n'est pas vraiment une réponse. J'ai juste pensé que ça pourrait aider quelqu'un. Je l'ai résolu en utilisant le nom complet de DBContext.

Au lieu de

public class MachineDbContext : DbContext

j'ai utilisé

public class MachineDbContext : System.Data.Entity.DbContext

et reconstruit le projet. Soudain, VS était heureux, et j'ai même pu supprimer le nom complet et utiliser simplement DBContext.


nom complet ... comment peut v oublier d'ajouter en utilisant la directive ....
x-code

8

J'ai eu le même problème ... L'installation de l'EF à partir de la console du gestionnaire de package a fonctionné pour moi

la commande était: Install-Package EntityFramework


4

Si votre compilateur ne reconnaît pas

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

assure-toi

  1. vous avez Entity Framework 4.1 installé sur votre machine;
  2. dans votre fichier .csproj, vous avez la référence suivante

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

    dans l'élément

    <ItemGroup>
      ...
    </ItemGroup>
    

    qui contient des références à d'autres assemblées.


4

J'ai eu le même problème .. J'ai VS2010 express ..

(Remarque: si vous rencontrez ce problème, essayez de vérifier les références à EntityFramework.dll. Il est peut-être manquant.)

Ce qui suit l'a résolu pour moi.

J'ai installé la dernière mise à jour des outils MVC 3,
puis j'ai installé EntityFramework 4.1
ou en utilisant NUGet ie. à partir de Visual Studio 2010 Express (Outils-> Gestionnaire de package de bibliothèque -> Ajouter une référence de package de bibliothèque -> Sélectionner en ligne -> EntityFramework)

Étrangement cela n'a pas fonctionné..J'ai donc dû ajouter manuellement une référence à "EntityFramework.dll"
essayez de faire une recherche pour la dll ..peut être ici
"C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ "

Si vous l'avez déjà, ajoutez simplement une référence «.net».

Remarque: Si vous utilisez NuGet, il crée un dossier «packages» à côté de votre répertoire Solution. Vous trouverez le dossier "EntityFramework.4.1.10331.0" à l'intérieur. Dans le dossier "Libs", vous trouverez "EntityFramework.dll".
Ajoutez-y une référence en utilisant l'onglet Parcourir et sélectionnez la DLL ci-dessus.

Snap pour le même


4

J'utilise Visual Studio 2010 express et j'ajoute une référence pour C:\Program Files\Microsoft ADO.NET Entity Framework 4.1\Binaries\EntityFramework.dllrésoudre le problème.


4

Cela aide vraiment pratique:

  1. Sélectionnez le projet ProjectNAme dans l'Explorateur de solutions.
  2. Dans le menu Outils, choisissez Library Package Manager qui a un sous-menu.
  3. Dans le sous-menu, choisissez Package Manager Console.
  4. À l'invite PM de la console, tapez le package d'installation EntityFramework, puis appuyez sur Entrée.


3

Votre projet n'a pas pu résoudre les classes EntityFramework tant que vous ne l'avez pas ajouté à votre projet. Pour ajouter la prise en charge d'EntityFramework, vous devez suivre les étapes suivantes: Outils-> Gestionnaire de packages Nuget -> Gérer le package Nuget pour la solution parcourir EntityFramework Il affiche la dernière version stable d'EntityFramework. actuellement 6.1.3 est la dernière version Installez-le pour le projet sélectionné.



2

Visual Studio Express SP1 Cliquez avec le bouton droit dans l'Explorateur de solutions> Références> Ajouter une référence de package de bibliothèque> EntityFramework


2

Utilisez plutôt CTP5, c'est une version plus récente avec quelques changements dans l'API. Vous devez ajouter une référence à EntityFramework.dll qui est installé dans le répertoire CTP - la valeur par défaut est: c: \ Program Files \ Microsoft ADO.NET Entity Framework Feature CTP5 \ Binaries \ EntityFramework.dll pour le système 32 bits. Sur un système 64 bits, il sera placé dans Program Files (x86).


2

Cela m'est arrivé lorsque j'ai branché le code. Pour résoudre ce problème, j'ai cliqué avec le bouton droit sur mon projet dans Visual Studio, j'ai choisi de gérer les packages Nu-get, j'ai désinstallé EntityFramework, puis je l'ai réinstallé. Problème résolu


2

Je viens d'avoir ce problème et aucune des autres solutions n'a fonctionné pour moi. J'utilise Visual Studio 2010 et j'ai deux projets dans ma solution: UIProject et DataAccessProject. UIProject a une référence à DataAccessProject.

Mon UIProject ciblait le .Net Framework 4 mais mon DataAccessProject ciblait le .Net Framework 3.5 pour une raison quelconque.

  • J'ai changé les deux projets pour cibler .Net Framework 4
  • Désinstallé puis réinstallé le package NuGet Entity Framework.

Problèmes résolus. Maintenant, j'ai des références à la fois à EntityFramework et System.Data.Entity


2

J'ai eu le même problème. J'ai dû réécrire "DBContext" après avoir ajouté une référence à entityframework et cela a résolu le problème.
cela signifie que Visual studio n'a pas été en mesure de reconnaître la classe automatiquement et a attendu qu'elle soit retapée. il est donc préférable d'ajouter d'abord la référence, puis d'implémenter le code. VS 2013 - ultime utilisé


2

J'ai d'abord dû désinstaller EntityFramework (Uninstall-package EntityFramework (pas sensible à la casse apparemment)), puis l'installer à nouveau (Install-package EntityFramework), via la console PM


1

J'ai eu ce problème, lisez la réponse ci-dessus et téléchargez le entityframework.ddl, mais j'ai constaté qu'il était déjà référencé. J'ai donc ajouté l'espace de noms et le problème a été résolu

using System.Data.Entity;

J'utilise Visual Studio 2010, SP1 installé


1

ayant référencé entityframework.dll les deux system.data.entity ont fonctionné.


1

J'ai eu la même erreur mais le problème était juste un problème accidentel avec mon modèle.

J'ai mis accidentellement ...

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

... à l'intérieur de la classe modèle.


1
Ces 3 lignes à l'intérieur de la classe?
Nate-Wilkins

1

Comme alternative, vous pouvez aller ICI - instructions pour installer toute dll requise.

Ou vous pouvez télécharger NuGet et le gérer à partir de VS


1

Cliquez avec le bouton droit sur votre référence et accédez à la gestion des packages NuGet, puis choisissez tout en ligne, puis la source du package NuGet dans la zone de texte de recherche, tapez Entity Framework et installez-la.


1

1) Désinstaller Entity Framework de tous projets

2) Redémarrez Visual Studio

3) Réinstallation sur tous les projets requis

et ça a commencé à fonctionner


1

Il peut y avoir un cas où vous faites référence à tout ce dont vous avez besoin et vous pouvez même aller à la définition en appuyant sur F12 sur la classe DbContext qui vous amène à l'espace de noms System.Data.Entity mais vous obtenez toujours cet avertissement de compilateur méchant. Assurez-vous que le Framework cible de votre projet et celui de la version d'Entity Framework que vous utilisez correspondent. Allez dans Projet-> Propriétés-> Onglet Application. Changez le cadre cible (vous ne pouvez pas dire exactement lequel, les essais et les erreurs vous aideront.). Juste mes deux cents.


1

Je suis également irrité à plusieurs reprises par ce problème et trouve enfin la solution.Allez dans le fichier edmx-> Mettre à jour le modèle à partir de la base de données-> Actualiser-> Terminer. Solution propre-> Solution de reconstruction


0

vous pouvez essayer la console du gestionnaire de packages

PM> EntityFrameWork \ enable-migrations


0

Comme les autres l'ont suggéré:

  1. Ajoutez les références et directives correctes. Mais ça ne marche toujours pas? Peut-être que vous avez le même problème que moi:

Regardez ci-dessous et voyez si vous pouvez me dire ce qui ne va pas:

public class PanelLengthContext : DBContext { } ??!

Assurez-vous que le nom de la classe n'est pas mal orthographié - (respect de la casse)!

  • DbContext est l'orthographe correcte.
  • voici à quoi cela devrait ressembler:
  • vérifier l'orthographe. ne gaspillez pas 20 minutes de votre vie comme je l'ai fait.public class PanelLengthContext : DbContext {}

HTH


0

J'ai le même problème que vous, je ne peux pas l'implémenter dans la classe Controller tant que cela fonctionne lorsque je le mets dans la classe model. Ajoutez ces codes en haut de votre classe de contrôleur

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

0

J'ai rencontré le même problème et ensuite j'ai ajouté l'espace de noms

using Practiceusingentityframework.Models;

Après avoir ajouté, cela fonctionne bien

Essayez ceci peut vous aider à résoudre votre problème

et avant cela, installez le framework d'entité à partir de Nuget Manager

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.