Nie można znaleźć nazwy typu lub przestrzeni nazw „DbContext” [zamknięte]

150

Jestem BARDZO nowy w ASP.NET MVC (3) i mam problemy z rozwiązaniem błędu kompilacji w programie Visual Studio:

Nie można znaleźć nazwy typu lub przestrzeni nazw `` DbContext '' (czy brakuje dyrektywy using lub odwołania do zestawu?)

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

Dwa błędy, które otrzymuję, to:

  • Nie można znaleźć nazwy typu lub przestrzeni nazw `` DbContext '' (czy brakuje dyrektywy using lub odwołania do zestawu?)
  • Nie można znaleźć nazwy typu lub przestrzeni nazw `` DbSet '' (czy brakuje dyrektywy using lub odwołania do zestawu?)

czego mi brakuje?

Chris
źródło
20
Czy dodano odwołanie do Entity Framework Code First przy użyciu NuGet? To może być najłatwiejszy sposób rozwiązywania odwołań.
Ed Chapel
2
ok - pod drzewem Solution Explorer kliknąłem prawym przyciskiem myszy References -> Add Library Package Reference -> EFCodeFirst -> Install. Czy to właśnie sugerowałeś? Po wykonaniu tych czynności nadal mam ten sam problem.
Chris
W międzyczasie zaktualizowałem narzędzia MVC 3 do najnowszej wersji i utworzyłem projekt samouczka zgodnie z asp.net/mvc/tutorials/getting-started-with-mvc3-part4-cs . W tym projekcie nie mam tego problemu, ale nie mogę zaakceptować DbContext w moim starszym projekcie, pomimo sugestii przedstawionych tutaj i przez Darina poniżej ...
Chris
VS2017, EF6, Zamknij rozwiązanie. Otwórz ponownie rozwiązanie. Teraz poprawnie rozpoznaje DbContext.
redwards510
1
Otwórz konsolę Menedżera pakietów. Wybierz pozycję narzędzia> Menedżer pakietów NuGet> konsola Menedżera pakietów. W konsoli Menedżera pakietów wprowadź następujące polecenie: install-package EntityFramework
Zahid Hasan

Odpowiedzi:

200

Miałem ten sam problem. Okazuje się, że potrzebujesz odwołania do EntityFramework.dll (a nie System.Data.Entity).

Właśnie wyciągnąłem go z aplikacji MvcMusicStore, którą możesz pobrać z: http://mvcmusicstore.codeplex.com/

Jest to również przydatny przykład, jak używać najpierw kodu jednostki z MVC.

Shaz
źródło
7
to było moje doświadczenie; EntityFramework.dll dla 4.2.0.0 nie był obecny, mimo że Menedżer pakietów vs2010 twierdził, że mam zainstalowaną wersję 4.2.0.0. Gdy mój projekt jest otwarty w vs2010, uruchomienie polecenia instalacji za pośrednictwem narzędzi, Menedżera pakietów bibliotek, konsoli Menedżera pakietów automatycznie dodało odwołanie do EntityFramework i moja kolejna kompilacja zakończyła się pomyślnie. thnx @Shahzad!
gerryLowry
7
Dzięki za pomoc. Mam nadzieję, że pewnego dnia Microsoft ułatwi instalację własnego oprogramowania w ich oknach! To niesamowite, do ilu miejsc trzeba się udać, żeby dowiedzieć się, co jest potrzebne i jak one wszystkie do siebie pasują. NuGet, witryna pobierania MS, fora dyskusyjne, książki,… naprawdę bardzo produktywny czas.
NoChance
23
Najlepszym rozwiązaniem jest użycie NuGet (menedżera pakietów) do ściągnięcia Entity Framework (i innych) do projektów.
kingdango
2
czasami trzeba ponownie uruchomić Visual Studio, aby instalacja działała. to był mój przypadek.
Beduin
3
Otwórz konsolę Menedżera pakietów i wklej w: Install-Package EntityFramework
user2862542
71

Musisz odwołać się do System.Data.Entityassebmly do swojego projektu lub zainstalować EntityFrameworkpakiet NuGet, który skonfiguruje wszystko za Ciebie.

Darin Dimitrov
źródło
1
Darin, czy mógłbyś wyjaśnić, jak można to zrobić?
Chris,
11
@Chris Dickinson, kliknij prawym przyciskiem myszy Referenceselement w projekcie i wybierz Add Reference.... Następnie na .NETkarcie wybierz System.Data.Entity. A jeśli chcesz użyć NuGet, kliknij prawym przyciskiem myszy Referenceselement, a następnie wybierz Add Library Package Reference...i na karcie Online wyszukaj EntityFramework.
Darin Dimitrov
1
Podążyłem za oboma twoimi krokami, ale problem nadal występuje ...
Chris
3
czy użyłeś NuGet do zainstalowania EntityFramework? Tworzy folder „pakiety” obok katalogu rozwiązania. Znajdziesz w nim folder "EntityFramework.4.1.10331.0". W folderze "Libs" znajdziesz "EntityFramework.dll". Dodaj odniesienie do niego za pomocą zakładki Przeglądaj i wybierz powyższy plik dll. zobacz moją odpowiedź poniżej… zrobiłem to samo.
Amitd
7
Wybrałem TOOLS > Library Package Manager > Package Manager Consolew VS2012 i wpisałem install-package EntityFrameworkpo monicie. Działał doskonale.
Peter Gluck
17

Tylko krótka notatka. To jest DbContext, a nie DBContext. tj. małą literą „B”. Odkryłem to, ponieważ miałem ten sam problem, podczas gdy Intelesense nie działał, dopóki nie spróbowałem wpisać pełnej nazwy przestrzeni System.Data.Entity ... i nazwy, a na koniec zasugerował opcję małej litery `` b '': -

System.Data.Entity.DbContext

Johna Thompsona
źródło
1
Przejrzałem wszystkie odniesienia dotyczące System.Data.Entity tylko po to, aby odkryć, że problemem była duża litera „B”. +1
F0r3v3r-A-N00b
Tak, to rozwiązało problem. Pod warunkiem, że krok „Zainstaluj pakiet EntityFramework” został wykonany. Dzięki, +1.
Paceman,
9

Miałem ten sam problem używając VS2010. Wiem, że to naprawdę nie jest odpowiedź. Pomyślałem, że to może komuś pomóc. Rozwiązałem to, używając w pełni kwalifikowanej nazwy dla DBContext.

Zamiast

public class MachineDbContext : DbContext

użyłem

public class MachineDbContext : System.Data.Entity.DbContext

i przebudował projekt. Nagle VS był szczęśliwy i mogłem nawet usunąć w pełni kwalifikowaną nazwę i po prostu użyć DBContext.

cab0
źródło
w pełni kwalifikowana nazwa ... jak można zapomnieć o dodaniu za pomocą dyrektywy ...
kod x
8

Miałem ten sam problem ... Instalowanie EF z konsoli Menedżera pakietów działało dla mnie

polecenie brzmiało: Install-Package EntityFramework

Felipe Skinner
źródło
4

Jeśli Twój kompilator nie rozpoznaje

  • System.Data.Entity.Infrastructure
  • DbContext
  • DbSet
  • i inni,

Upewnić się

  1. masz Entity Framework 4.1 zainstalowany na swoim komputerze;
  2. w pliku .csproj masz następujące odniesienie

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

    wewnątrz elementu

    <ItemGroup>
      ...
    </ItemGroup>
    

    który zawiera odniesienia do innych zespołów.

user669226
źródło
4

Miałem ten sam problem .. mam VS2010 express ..

(Uwaga: jeśli widzisz ten problem, spróbuj sprawdzić odwołania do EntityFramework.dll .. Może ich brakuje).

Następujące odpowiedzi rozwiązały to za mnie.

Zainstalowałem najnowszą aktualizację narzędzi MVC 3,
a następnie zainstalowałem EntityFramework 4.1
lub używając NUGet tj. from z Visual Studio 2010 Express (Narzędzia -> Menedżer pakietów bibliotek -> Dodaj odwołanie do pakietu biblioteki -> Wybierz Online -> EntityFramework)

O dziwo, to nie zadziałało .. Więc musiałem ręcznie dodać odwołanie do „EntityFramework.dll”,
spróbuj wyszukać dll .. może być tutaj
„C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ "

Jeśli już ją masz, po prostu dodaj odwołanie do „.net”.

Uwaga: jeśli używasz NuGet, tworzy on folder „pakiety” obok katalogu rozwiązania. Znajdziesz w nim folder „EntityFramework.4.1.10331.0”. W folderze „Libs” znajdziesz „EntityFramework.dll”.
Dodaj odniesienie do niego za pomocą zakładki Przeglądaj i wybierz powyższy plik dll.

Chwyć za to samo

Amitd
źródło
4

Używam programu Visual Studio 2010 Express i dodaję odniesienie do C:\Program Files\Microsoft ADO.NET Entity Framework 4.1\Binaries\EntityFramework.dllrozwiązania problemu.

POPIELONY
źródło
4

To bardzo przydatne:

  1. Wybierz projekt ProjectNAme w Eksploratorze rozwiązań.
  2. Z menu Narzędzia wybierz opcję Menedżer pakietów bibliotecznych, która ma podmenu.
  3. Z podmenu wybierz Konsola menedżera pakietów.
  4. W monicie PM konsoli wpisz pakiet instalacyjny EntityFramework, a następnie naciśnij Enter.
BehranG BinA
źródło
3

Twój projekt nie może rozpoznać klas EntityFramework, dopóki nie dodasz go do projektu. Aby dodać obsługę EntityFramework, należy wykonać następujące kroki: Narzędzia-> Menedżer pakietów Nuget -> Zarządzaj pakietem Nuget dla rozwiązania przeglądaj EntityFramework Pokazuje najnowszą stabilną wersję EntityFramework. obecnie 6.1.3 to najnowsza wersja Zainstaluj ją dla wybranego projektu.

Shubham Tiwari
źródło
3

Pobierz http://www.dll-found.com/download/e/EntityFramework.dll

Wklej to w (dla x86)

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\

Następnie kliknij prawym przyciskiem myszy projekt -> dodaj odniesienie -> wybierz EntityFramework

Bingo ......

Sanoop
źródło
2

Visual Studio Express SP1 Kliknij prawym przyciskiem myszy w Eksploratorze rozwiązań> Referencje> Dodaj odwołanie do pakietu biblioteki> EntityFramework

mesteru_vali
źródło
2

Zamiast tego użyj CTP5, jest to nowsza wersja z pewnymi zmianami w API. Musisz dodać odniesienie do EntityFramework.dll, który jest zainstalowany w katalogu CTP - domyślnie: c: \ Program Files \ Microsoft ADO.NET Entity Framework Feature CTP5 \ Binaries \ EntityFramework.dll dla systemu 32-bitowego. W systemie 64-bitowym zostanie umieszczony w Program Files (x86).

Jan
źródło
2

Zdarzyło mi się to, gdy rozgałęziłem kod. Aby to naprawić, kliknąłem prawym przyciskiem myszy mój projekt w programie Visual Studio, wybrałem zarządzanie pakietami Nu-get, odinstalowałem EntityFramework, a następnie ponownie zainstalowałem. Problem rozwiązany

Neil
źródło
2

Właśnie miałem ten problem i żadne z innych rozwiązań nie działało dla mnie. Używam programu Visual Studio 2010 i mam w rozwiązaniu dwa projekty: UIProject i DataAccessProject. UIProject ma odwołanie do DataAccessProject.

Mój UIProject był ukierunkowany na .Net Framework 4, ale mój DataAccessProject był nakierowany na .Net Framework 3.5 z jakiegoś powodu.

  • Zmieniłem oba projekty na .Net Framework 4
  • Odinstalowano, a następnie ponownie zainstalowano pakiet NuGet Entity Framework.

Rozwiązane problemy. Teraz mam odniesienia do obu EntityFramework i System.Data.Entity

MoMo
źródło
2

Miałem ten sam problem. Musiałem przepisać „DBContext” po dodaniu odwołania do entityframework i to rozwiązało problem.
oznacza to, że program Visual Studio nie był w stanie automatycznie rozpoznać klasy i czekał na jej ponowne wpisanie. dlatego najlepiej najpierw dodać odniesienie, a następnie zaimplementować kod. VS 2013 - ostateczny używany


źródło
2

Musiałem najpierw odinstalować EntityFramework (Uninstall-package EntityFramework (najwyraźniej bez rozróżniania wielkości liter)), a następnie zainstalować go ponownie (Install-package EntityFramework), za pośrednictwem konsoli PM

Mpilo Z
źródło
1

Miałem ten problem, przeczytaj powyższą odpowiedź i pobierz plik entityframework.ddl, ale stwierdziłem, że jest on już przywoływany. Dodałem więc przestrzeń nazw i problem został rozwiązany

using System.Data.Entity;

Używam programu Visual Studio 2010 z zainstalowanym dodatkiem SP1

Muhammad Waqas Iqbal
źródło
1

po odwołaniu się do entityframework.dll oba system.data.entity działały.

meol
źródło
1

Miałem ten sam błąd, ale problem był po prostu przypadkowym problemem z moim modelem.

Przypadkowo włożyłem ...

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

... wewnątrz klasy modelu.

Jason Geiger
źródło
1
Te 3 linie faktycznie są w klasie?
Nate-Wilkins
1

Alternatywnie możesz przejść TUTAJ - instrukcja instalacji wymaganej biblioteki dll.

Lub możesz pobrać NuGet i zarządzać nim z VS

gbk
źródło
1

Kliknij prawym przyciskiem myszy odwołanie i przejdź do zarządzania pakietami NuGet, a następnie wybierz wszystkie online, a następnie źródło pakietu NuGet w polu tekstowym wyszukiwania typu Entity Framework i zainstaluj je.

kidistB
źródło
1

1) Odinstalowywanie Entity Framework ze wszystkich projektów

2) Uruchom ponownie program Visual Studio

3) Ponowna instalacja we wszystkich wymaganych projektach

i zaczęło działać

Moji
źródło
1

Może się zdarzyć, że odniesiesz się do wszystkiego, czego potrzebujesz, a nawet możesz przejść do definicji, naciskając klawisz F12 w klasie DbContext, która przeniesie Cię do przestrzeni nazw System.Data.Entity, ale nadal otrzymujesz to paskudne ostrzeżenie kompilatora. Upewnij się, że platforma docelowa projektu i wersja Entity Framework, której używasz, są zgodne. Przejdź do Project-> Properties-> Application Tab. Zmień platformę docelową (nie można dokładnie powiedzieć, do której z nich pomoże metoda prób i błędów). Tylko moje dwa centy.

Mikayil Abdullayev
źródło
1

Irytuje mnie też ten problem wiele razy iw końcu znajduję rozwiązanie: przejdź do pliku edmx-> Aktualizuj model z bazy danych-> Odśwież-> Zakończ. Clean Solution-> Rebuild Solution

Aayush Verma
źródło
0

możesz spróbować na konsoli menedżera pakietów

PM> EntityFrameWork \ enable-migrations

Michael Felina
źródło
0

Jak sugerowali inni:

  1. Dodaj prawidłowe odwołania i dyrektywy. Ale to nadal nie działa? Może masz ten sam problem co ja:

Spójrz poniżej i zobacz, czy możesz mi powiedzieć, co jest nie tak:

public class PanelLengthContext : DBContext { } ??!

Upewnij się, że nazwa klasy nie zawiera błędów - (rozróżniana jest wielkość liter)!

  • DbContext to poprawna pisownia.
  • tak to powinno wyglądać:
  • Sprawdź pisownię. nie marnuj 20 minut swojego życia tak jak ja.public class PanelLengthContext : DbContext {}

HTH

BKSpurgeon
źródło
0

Mam ten sam problem co Ty, nie mogę go zaimplementować w klasie Controller, podczas gdy działa, gdy umieszczam go w klasie modelu. Dodaj te kody na początku swojej klasy kontrolera

 using TimeSheetManagementSystem.Data;
 using Microsoft.Extensions.Configuration;
 using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
 using Microsoft.EntityFrameworkCore;
 using Newtonsoft.Json;
JApple
źródło
0

Napotkałem ten sam problem, a następnie dodałem przestrzeń nazw

using Practiceusingentityframework.Models;

Po dodaniu działa dobrze

Spróbuj tego, aby rozwiązać problem

a wcześniej zainstaluj strukturę jednostek z Nuget Manager

Aravindhan R
źródło