Impossibile trovare il tipo o il nome dello spazio dei nomi 'DbContext' [chiuso]


150

Sono MOLTO nuovo di ASP.NET MVC (3) e non riesco a risolvere un errore di build in Visual Studio:

Impossibile trovare il nome del tipo o dello spazio dei nomi "DbContext" (manca una direttiva che utilizza o un riferimento di 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; }
    }
}

I due errori che sto riscontrando sono:

  • Impossibile trovare il nome del tipo o dello spazio dei nomi "DbContext" (manca una direttiva che utilizza o un riferimento di assembly?)
  • Impossibile trovare il tipo o il nome dello spazio dei nomi 'DbSet' (manca una direttiva che utilizza o un riferimento di assembly?)

Cosa mi sto perdendo?


20
Hai aggiunto il codice di riferimento Entity Framework First usando NuGet? Questo potrebbe essere il modo più semplice per risolvere i riferimenti.
Ed Chapel,

2
ok - sotto l'albero Esplora soluzioni ho fatto clic con il tasto destro del mouse su Riferimenti -> Aggiungi riferimento pacchetto libreria -> EFCodeFirst -> Installa. È questo che stavi suggerendo? Dopo aver seguito questi passaggi ho ancora lo stesso problema.
Chris,

Nel frattempo ho aggiornato gli strumenti MVC 3 alla versione più recente e ho creato un progetto tutorial seguendo asp.net/mvc/tutorials/getting-started-with-mvc3-part4-cs . In quel progetto, non ho questo problema, ma non riesco a far accettare DbContext nel mio vecchio progetto, nonostante i suggerimenti fatti qui e da Darin qui sotto ...
Chris

VS2017, EF6, Chiudi la soluzione. Riapri la soluzione. Ora riconosce correttamente DbContext.
redwards510,

1
Apri la Console di gestione pacchetti. Selezionare Strumenti> Gestione pacchetti NuGet> Console Gestione pacchetti. Nella console di Package Manager, immettere il seguente comando: install-package EntityFramework
Zahid Hasan

Risposte:


200

Ho avuto lo stesso problema. Si scopre che è necessario il riferimento EntityFramework.dll (e non System.Data.Entity).

L'ho appena estratto dall'applicazione MvcMusicStore che puoi scaricare da: http://mvcmusicstore.codeplex.com/

È anche un utile esempio di come utilizzare il framework di entità prima di tutto con MVC.


7
questa è stata la mia esperienza; EntityFramework.dll per 4.2.0.0 non era presente anche se Gestione pacchetti vs2010 ha affermato che avevo installato 4.2.0.0. Con il mio progetto aperto in vs2010, l'esecuzione del comando di installazione tramite Strumenti, Library Package Manager, Package Manager Console ha aggiunto automaticamente il riferimento a EntityFramework e la mia successiva build ha avuto esito positivo. thnx @Shahzad!
GerryLowry,

7
Grazie per l'aiuto. Spero che un giorno Microsoft semplifichi l'installazione del proprio software su Windows! È incredibile quanti posti si debbano percorrere per capire cosa è necessario e come si incastrano tutti insieme. NuGet, sito di download di MS, bacheche di messaggi, libri, .... in effetti molto tempo produttivo.
NoChance,

23
La soluzione migliore è utilizzare NuGet (gestore di pacchetti) per inserire Entity Framework (et al) nei tuoi progetti.
Kingdango,

2
alcune volte è necessario riavviare Visual Studio per far funzionare l'installazione. questo è stato il mio caso.
Beduino

3
Apri la console di Gestione pacchetti e incolla: Install-Package EntityFramework
user2862542

71

Devi fare riferimento System.Data.Entityall'assebmly al tuo progetto o installare il EntityFrameworkpacchetto NuGet che imposterà tutto per te.


1
Darin, potresti spiegarmi come si farebbe?
Chris,

11
@ Chris Dickinson, fai clic destro Referencessull'elemento nel progetto e seleziona Add Reference.... Quindi nella .NETscheda, selezionare System.Data.Entity. E se si desidera utilizzare NuGet, fare clic con il pulsante destro del mouse Referencessull'elemento, quindi selezionare Add Library Package Reference...e nella scheda Online, cercare EntityFramework.
Darin Dimitrov,

1
Ho seguito entrambi i tuoi passi, ma il problema persiste ancora ...
Chris,

3
hai usato NuGet per installare EntityFramework? Crea una cartella "pacchetti" lungo la directory della soluzione. Troverai la cartella "EntityFramework.4.1.10331.0" al suo interno. All'interno della cartella "Libs" troverai "EntityFramework.dll". Aggiungi riferimento ad essa usando la scheda Sfoglia e seleziona la dll sopra. vedi la mia risposta qui sotto .. ho fatto lo stesso.
Amitd,

7
Ho selezionato TOOLS > Library Package Manager > Package Manager Consolein VS2012 e digitato install-package EntityFrameworkal prompt. Ha funzionato perfettamente.
Peter Gluck,

17

Solo una breve nota. È DbContext, non DBContext. cioè con una 'B' minuscola. L'ho scoperto perché avevo lo stesso problema mentre l'intelesense non funzionava fino a quando non ho provato a digitare lo spazio dei nomi completo System.Data.Entity ... e il nome e infine mi ha suggerito l'opzione 'b' minuscola: -

System.Data.Entity.DbContext


1
Ho esaminato tutti i riferimenti relativi a System.Data.Entity solo per scoprire che il problema era la "B" maiuscola. +1
F0r3v3r-A-N00b

Sì, questo ha risolto. È stato eseguito il passaggio "Install-Package EntityFramework". Grazie, +1.
Paceman,

9

Ho avuto lo stesso problema con VS2010. So che questa non è davvero una risposta. Ho solo pensato che potesse aiutare qualcuno. L'ho risolto utilizzando il nome completo per DBContext.

Invece di

public class MachineDbContext : DbContext

ero solito

public class MachineDbContext : System.Data.Entity.DbContext

e ricostruito il progetto. All'improvviso VS è stato felice e sono stato persino in grado di rimuovere il nome completo e usare DBContext.


nome completo ... come posso dimenticare di aggiungere usando la direttiva ....
x-code

8

Ho avuto lo stesso problema ... L'installazione di EF dalla console di Package Manager ha funzionato per me

il comando era: Install-Package EntityFramework


4

Se il compilatore non riconosce

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

assicurarsi

  1. hai Entity Framework 4.1 installato sul tuo computer;
  2. nel tuo file .csproj, hai il seguente riferimento

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

    all'interno dell'elemento

    <ItemGroup>
      ...
    </ ItemGroup>
    

    che ospita riferimenti ad altre assemblee.


4

Ho avuto lo stesso problema .. Ho VS2010 express ..

(Nota: se vedi questo problema prova a controllare i riferimenti a EntityFramework.dll .. Potrebbe essere che manchi.)

Quanto segue lo ha risolto per me.

Ho installato l'ultimo aggiornamento degli strumenti MVC 3,
quindi ho installato EntityFramework 4.1
o usando NUGet ie. da con Visual Studio 2010 Express (Strumenti-> Gestione pacchetti libreria -> Aggiungi riferimento pacchetto libreria -> Seleziona online -> EntityFramework)

Stranamente che non ha funzionato ... Quindi ho dovuto aggiungere manualmente un riferimento a "EntityFramework.dll"
provare a fare una ricerca per la dll .. potrebbe essere qui
"C: \ Programmi (x86) \ Assembly Assembly \ Microsoft \ Framework.NETFramework \ v4.0 \"

Se lo hai già ... basta aggiungere un riferimento ".net".

Nota: se si utilizza NuGet, viene creata una cartella "pacchetti" accanto alla directory della soluzione. All'interno troverai la cartella "EntityFramework.4.1.10331.0". All'interno della cartella "Libs" troverai "EntityFramework.dll".
Aggiungi riferimento ad esso usando la scheda Sfoglia e seleziona la dll sopra.

Snap per lo stesso


4

Sto usando Visual Studio 2010 Express e aggiungendo un riferimento per C:\Program Files\Microsoft ADO.NET Entity Framework 4.1\Binaries\EntityFramework.dllrisolvere il problema.


4

Questo è davvero utile:

  1. Selezionare il progetto ProjectNAme in Esplora soluzioni.
  2. Dal menu Strumenti, seleziona Library Package Manager che ha un sottomenu.
  3. Dal sottomenu selezionare Console Gestione pacchetti.
  4. Al prompt PM della console digitare install-package EntityFramework quindi premere invio.


3

Il tuo progetto non è stato in grado di risolvere le classi EntityFramework fino a quando non lo hai aggiunto al progetto. Per aggiungere il supporto EntityFramework devi seguire questi passaggi: Strumenti-> Nuget Package Manager -> Gestisci pacchetto Nuget per la soluzione sfogliare EntityFramework Mostra l'ultima versione stabile di EntityFramework. attualmente 6.1.3 è l'ultima versione Installarlo per il progetto selezionato.



2

Visual Studio Express SP1 Fare clic con il tasto destro del mouse su Esplora soluzioni> Riferimenti> Aggiungi riferimento al pacchetto libreria> EntityFramework


2

Utilizzare CTP5 invece è la versione più recente con alcune modifiche all'API. Devi aggiungere un riferimento a EntityFramework.dll che è installato nella directory CTP - l'impostazione predefinita è: c: \ Programmi \ Microsoft ADO.NET Entity Framework Feature CTP5 \ Binaries \ EntityFramework.dll per il sistema a 32 bit. Sul sistema a 64 bit verrà inserito in Programmi (x86).


2

Questo mi è successo quando ho ramificato il codice. Per risolverlo ho fatto clic con il pulsante destro del mouse sul mio progetto in Visual Studio, ho scelto di gestire i pacchetti Nu-get, disinstallato EntityFramework, quindi reinstallarlo. Problema risolto


2

Ho appena avuto questo problema e nessuna delle altre soluzioni ha funzionato per me. Sto usando Visual Studio 2010 e ho due progetti nella mia soluzione: UIProject e DataAccessProject. UIProject ha un riferimento a DataAccessProject.

Il mio UIProject stava prendendo di mira il .Net Framework 4 ma il mio DataAccessProject stava prendendo di mira il .Net Framework 3.5 per qualche motivo.

  • Ho modificato entrambi i progetti in .Net Framework 4
  • Disinstallato, quindi reinstallato il pacchetto NuGet di Entity Framework.

Problemi risolti Ora ho riferimenti sia a EntityFramework che a System.Data.Entity


2

ho avuto lo stesso problema. Ho dovuto riscrivere "DBContext" dopo aver aggiunto il riferimento a entityframework e il problema è stato risolto.
significa che Visual Studio non è stato in grado di riconoscere automaticamente la classe e ha aspettato che venisse riscritto. quindi è meglio aggiungere prima il riferimento e quindi implementare il codice. VS 2013 - ultimo usato


2

Ho dovuto prima disinstallare EntityFramework (pacchetto di disinstallazione EntityFramework (apparentemente senza distinzione tra maiuscole e minuscole)), quindi reinstallarlo (Installa-pacchetto EntityFramework), tramite la console PM


1

Ho avuto questo problema, leggere la risposta sopra e scaricare entityframework.ddl ma ho scoperto che è già stato fatto riferimento. Quindi ho aggiunto lo spazio dei nomi e il problema è stato risolto

utilizzando System.Data.Entity;

Sto usando Visual Studio 2010, SP1 installato


1

avendo riferito entityframework.dll sia system.data.entity funzionato.


1

Ho avuto lo stesso errore ma il problema era solo un problema accidentale con il mio modello.

Ho accidentalmente messo ...

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

... all'interno della classe del modello.


1
Quelle 3 linee in realtà all'interno della classe?
Nate-Wilkins,

1

In alternativa puoi andare QUI - istruzioni su come installare qualsiasi dll richiesta.

Oppure puoi scaricare NuGet e gestirlo da VS


1

Fai clic con il pulsante destro del mouse sul riferimento e vai a gestire i pacchetti NuGet, quindi seleziona tutto online, quindi l'origine del pacchetto NuGet nella casella di testo di ricerca tipo Entity Framework e installalo.


1

1) Disinstallazione di Entity Framework da All progetti

2) Riavvia Visual Studio

3) Reinstallazione su tutti i progetti richiesti

e ha iniziato a funzionare


1

Potrebbe esserci un caso in cui fai riferimento a tutto ciò di cui hai bisogno e puoi persino andare a Definizione premendo F12 sulla classe DbContext che ti porta allo spazio dei nomi System.Data.Entity ma ricevi ancora questo brutto avviso del compilatore. Assicurati che il Target Framework del tuo progetto e quello della versione Entity Framework che stai utilizzando corrispondano. Vai su Progetto-> Proprietà-> Scheda Applicazione. Cambia il Target Framework (non posso dire esattamente quale, la prova e l'errore aiuteranno.). Solo i miei due centesimi.


1

Anche questo problema mi irrita molte volte e finalmente trovo la soluzione. Vai al file edmx-> Aggiorna modello dal database-> Aggiorna-> Fine. Soluzione pulita-> Ricostruisci soluzione


0

puoi provare sulla console di gestione dei pacchetti

PM> EntityFrameWork \ enable-migrations


0

Come gli altri hanno suggerito:

  1. Aggiungi i riferimenti e le direttive corretti. Ma non funziona ancora? Forse hai lo stesso problema che ho fatto:

Dai un'occhiata qui sotto e vedi se puoi dirmi cosa non va:

public class PanelLengthContext : DBContext { } ??!

Assicurati che il nome della classe non sia errato - (maiuscole e minuscole)!

  • DbContext è l'ortografia corretta.
  • ecco come dovrebbe apparire:
  • controlla l'ortografia. non perdere 20 minuti della tua vita come ho fatto io.public class PanelLengthContext : DbContext {}

HTH


0

Ho lo stesso problema, non riesco a implementarlo nella classe Controller mentre funziona quando lo inserisco nella classe del modello. Aggiungi questi codici nella parte superiore della classe del controller

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

0

Ho riscontrato lo stesso problema e quindi ho aggiunto lo spazio dei nomi

using Practiceusingentityframework.Models;

Dopo aver aggiunto sta funzionando bene

Prova questo può aiutarti a risolvere il tuo problema

e prima di quello installare il framework di entità da Nuget Manager

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.