Não foi possível encontrar o tipo ou nome do namespace 'DbContext' [fechado]

150

Eu sou MUITO novo no ASP.NET MVC (3) e estou com dificuldades para resolver um erro de compilação no Visual Studio:

Não foi possível encontrar o tipo ou nome do namespace 'DbContext' (está faltando uma diretiva de uso ou uma referência de montagem?)

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

Os dois erros que estou recebendo são:

  • Não foi possível encontrar o tipo ou nome do namespace 'DbContext' (está faltando uma diretiva de uso ou uma referência de montagem?)
  • Não foi possível encontrar o tipo ou nome do namespace 'DbSet' (está faltando uma diretiva de uso ou uma referência de montagem?)

o que estou perdendo?

Chris
fonte
20
Você adicionou a referência do First Entity Framework Code usando o NuGet? Essa pode ser a maneira mais fácil de resolver referências.
Ed Chapel
2
ok - sob a árvore do Solution Explorer, cliquei com o botão direito do mouse em References -> Add Library Package Reference -> EFCodeFirst -> Install. É isso que você estava sugerindo? Depois de seguir estas etapas, ainda tenho o mesmo problema.
Chris
Enquanto isso, atualizei o MVC 3 Tools para a versão mais recente e criei um projeto tutorial seguindo asp.net/mvc/tutorials/getting-started-with-mvc3-part4-cs . Nesse projeto, eu não tenho esse problema, mas eu não posso começar DbContext para ser aceito no meu projeto mais velho, apesar das sugestões feitas aqui e por Darin abaixo ...
Chris
VS2017, EF6, Feche a solução. Reabra a solução. Agora ele reconhece corretamente o DbContext.
redwards510
1
Abra o console do gerenciador de pacotes. Selecione Ferramentas> Gerenciador de Pacotes NuGet> Console do Gerenciador de Pacotes. No Console do gerenciador de pacotes, digite o seguinte comando: install-package EntityFramework
Zahid Hasan

Respostas:

200

Eu tive o mesmo problema. Acontece que você precisa da referência EntityFramework.dll (e não do System.Data.Entity).

Eu apenas peguei no aplicativo MvcMusicStore, do qual você pode baixar: http://mvcmusicstore.codeplex.com/

Também é um exemplo útil de como usar a estrutura da entidade primeiro com o MVC.

Shaz
fonte
7
essa foi a minha experiência; o EntityFramework.dll para 4.2.0.0 não estava presente, embora o Gerenciador de Pacotes vs2010 alegasse que eu tinha 4.2.0.0 instalado. Com o meu projeto aberto no vs2010, a execução do comando install via Tools, Library Package Manager, Package Manager Console adicionou automaticamente a referência ao EntityFramework e minha compilação subsequente foi bem-sucedida. thnx @Shahzad!
usar o seguinte código
7
Obrigado pela ajuda. Espero que a Microsoft um dia facilite a instalação de seu próprio software em suas janelas! É incrível quantos lugares é preciso ir para descobrir o que é necessário e como todos eles se encaixam. NuGet, MS Download site, Fóruns, livros, .... tempo realmente produtivo.
NoChance
23
Sua melhor aposta é usar o NuGet (gerenciador de pacotes) para atrair o Entity Framework (et al) para seus projetos.
kingdango
2
algumas vezes você precisa reiniciar o visual studio para fazer a instalação funcionar. esse foi o meu caso.
Bedouin
3
Abra o Console do Gerenciador de Pacotes e cole em: Install-Package EntityFramework
user2862542
71

Você precisa referenciar System.Data.Entityassebmly ao seu projeto ou instalar o EntityFrameworkpacote NuGet, que configurará tudo para você.

Darin Dimitrov
fonte
1
Darin, você poderia explicar como alguém faria isso?
Chris
11
@ Chris Dickinson, clique com o botão direito do mouse no Referencesitem do projeto e selecione Add Reference.... Em seguida, na .NETguia, selecione System.Data.Entity. E se você deseja usar o NuGet, clique com o botão direito do mouse no Referencesitem e selecione Add Library Package Reference...e, na guia Online, procure EntityFramework.
precisa saber é o seguinte
1
Segui ambas as etapas, mas as persiste problema ainda ...
Chris
3
você usou o NuGet para instalar o EntityFramework? Ele cria uma pasta "packages" ao lado do diretório Solution. Você encontrará a pasta "EntityFramework.4.1.10331.0" dentro dela. Dentro da pasta "Libs", você encontrará "EntityFramework.dll". Adicione uma referência a ela usando a guia Procurar e selecione a dll acima. veja minha resposta abaixo .. eu fiz o mesmo.
Amitd 10/07
7
Eu selecionei TOOLS > Library Package Manager > Package Manager Consoleno VS2012 e digitei install-package EntityFrameworkno prompt. Funcionou perfeitamente.
Peter Gluck
17

Apenas uma nota rápida. É DbContext, não DBContext. ou seja, com um 'B' minúsculo. Descobri isso porque tive o mesmo problema enquanto o intelesense não estava funcionando até tentar digitar o espaço para nome completo System.Data.Entity ... e name e, finalmente, sugeriu a opção 'b' em minúscula: -

System.Data.Entity.DbContext

John Thompson
fonte
1
Venho examinando todas as referências relativas ao System.Data.Entity apenas para descobrir que o problema estava em maiúsculas "B". +1
F0r3v3r-A-N00b 14/07/2015
Sim, isso resolveu. A etapa "Install-Package EntityFramework" foi concluída. Obrigado, +1.
Paceman
9

Eu tive o mesmo problema usando o VS2010. Eu sei que isso não é realmente uma resposta. Eu apenas pensei que isso poderia ajudar alguém. Eu o resolvi usando o nome completo para DBContext.

Ao invés de

public class MachineDbContext : DbContext

eu usei

public class MachineDbContext : System.Data.Entity.DbContext

e reconstruiu o projeto. De repente, o VS ficou feliz e consegui remover o nome completo e usar o DBContext.

cab0
fonte
totalmente nome qualificado ... como pode v esqueça de adicionar usando directiva ....
x-code
8

Eu tive o mesmo problema ... A instalação do EF do Package Manager Console funcionou para mim

o comando foi: Install-Package EntityFramework

Felipe Skinner
fonte
4

Se o seu compilador não reconhecer

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

certificar-se de que

  1. você possui o Entity Framework 4.1 instalado em sua máquina;
  2. no seu arquivo .csproj, você tem a seguinte referência

    <Referência Incluir = "EntityFramework, Versão = 4.1.0.0, Cultura = neutra, PublicKeyToken = b77a5c561934e089, processorArchitecture = MSIL" />
    

    dentro do elemento

    <ItemGroup>
      ...
    </ItemGroup>
    

    que abriga referências a outras assembléias.

user669226
fonte
4

Eu tive o mesmo problema .. eu tenho o VS2010 express ..

(Nota: se você vir esse problema, tente verificar as referências ao EntityFramework.dll. Pode estar faltando.)

O seguinte resolveu para mim.

Instalei a última atualização do MVC 3 Tools
e instalei o EntityFramework 4.1
ou usando o NUGet, por exemplo. no Visual Studio 2010 Express (Ferramentas-> Gerenciador de Pacotes de Bibliotecas -> Adicionar referência de pacote de biblioteca -> Selecione Online -> EntityFramework)

Estranhamente, isso não funcionou .. Então, eu tive que adicionar manualmente uma referência a "EntityFramework.dll",
tentando fazer uma pesquisa para a dll ... pode estar aqui
"C: \ Arquivos de programas (x86) \ Assemblies de referência \ Microsoft \ Framework.NETFramework \ v4.0 \ "

Se você já o possui .. basta adicionar uma referência '.net'.

Nota: Se você usa o NuGet, ele cria uma pasta "pacotes" ao lado do diretório da solução. Você encontrará a pasta "EntityFramework.4.1.10331.0" dentro dela. Dentro da pasta "Libs", você encontrará "EntityFramework.dll".
Adicione referência a ele usando a guia Procurar e selecione a dll acima.

Snap para o mesmo

Amitd
fonte
4

Estou usando o Visual Studio 2010 express e adicionando uma referência para C:\Program Files\Microsoft ADO.NET Entity Framework 4.1\Binaries\EntityFramework.dllresolver o problema.

ASHISH
fonte
4

Isso ajuda muito útil:

  1. Selecione o projeto ProjectNAme no Solution Explorer.
  2. No menu Ferramentas, escolha Gerenciador de pacotes da biblioteca que possui um submenu.
  3. No submenu, escolha Console do Gerenciador de Pacotes.
  4. No prompt do PM do console, digite install-package EntityFramework e pressione enter.
BehranG BinA
fonte
3

Seu projeto não conseguiu resolver as classes EntityFramework até que você não o tenha adicionado ao seu projeto. Para adicionar o suporte ao EntityFramework, siga estas etapas: Ferramentas-> Gerenciador de Pacotes Nuget -> Gerenciar pacote Nuget para procurar a solução EntityFramework Mostra a última versão estável do EntityFramework. atualmente 6.1.3 é a versão mais recente Instale-o para o projeto selecionado.

Shubham Tiwari
fonte
3

Faça o download do http://www.dll-found.com/download/e/EntityFramework.dll

Cole-o (para x86)

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

Em seguida, clique com o botão direito do mouse em projeto -> adicionar referência -> selecione EntityFramework

Bingo......

Sanoop
fonte
2

Visual Studio Express SP1 Clique com o botão direito do mouse em Solution Explorer> Referências> Adicionar Referência ao Pacote da Biblioteca> EntityFramework

mesteru_vali
fonte
2

Use CTP5 em vez disso, é a versão mais recente, com algumas alterações na API. Você deve adicionar uma referência ao EntityFramework.dll que está instalado no diretório CTP - o padrão é: c: \ Arquivos de programas \ Microsoft ADO.NET Entity Framework Feature CTP5 \ Binaries \ EntityFramework.dll para o sistema de 32 bits. No sistema de 64 bits, ele será colocado em Arquivos de Programa (x86).

John
fonte
2

Isso aconteceu comigo quando eu ramifiquei o código. Para corrigi-lo, cliquei com o botão direito do mouse no meu projeto no Visual Studio, escolhi gerenciar pacotes Nu-get, desinstalou o EntityFramework e o reinstalei. Problema resolvido

Neil
fonte
2

Acabei de ter esse problema e nenhuma das outras soluções funcionou para mim. Estou usando o Visual Studio 2010 e tenho dois projetos em minha solução: UIProject e DataAccessProject. O UIProject tem uma referência ao DataAccessProject.

Meu UIProject estava direcionado ao .Net Framework 4, mas meu DataAccessProject estava direcionado ao .Net Framework 3.5 por algum motivo.

  • Alterei os dois projetos para atingir o .NET Framework 4
  • Desinstalado e reinstalado o pacote NuGet do Entity Framework.

Problemas resolvidos. Agora eu tenho referências para EntityFramework e System.Data.Entity

MoMo
fonte
2

Eu tive o mesmo problema.Eu tive que reescrever "DBContext" depois de adicionar referência ao entityframework e resolveu o problema.
isso significa que o Visual studio não conseguiu reconhecer a classe automaticamente e esperou que ela fosse digitada novamente. portanto, é melhor adicionar referência primeiro e depois implementar o código. VS 2013 - final usado


fonte
2

Precisei desinstalar o EntityFramework (desinstalar o pacote EntityFramework (aparentemente não diferencia maiúsculas de minúsculas)) e depois instalá-lo novamente (Install-package EntityFramework), por meio do console PM

Mpilo Z
fonte
1

Eu tive esse problema, leia a resposta acima e baixe o entityframework.ddl, mas constatei que ele já foi mencionado. Então eu adicionei o espaço para nome e o problema foi resolvido

using System.Data.Entity;

Estou usando o Visual Studio 2010, SP1 instalado

Muhammad Waqas Iqbal
fonte
1

tendo referenciado entityframework.dll, system.data.entity funcionou.

meol
fonte
1

Eu tive o mesmo erro, mas o problema era apenas um problema acidental com o meu modelo.

Eu acidentalmente coloquei ...

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

... dentro da classe de modelo.

Jason Geiger
fonte
1
Aquelas 3 linhas realmente dentro da classe?
Nate-Wilkins #
1

Como forma alternativa, você pode ir AQUI - instruções sobre como instalar qualquer dll necessária.

Ou você pode baixar o NuGet e gerenciá-lo no VS

gbk
fonte
1

Clique com o botão direito do mouse em sua referência e vá para gerenciar pacotes NuGet, escolha todos online, depois a fonte do pacote NuGet na caixa de texto de pesquisa, digite Entity Framework e instale-o.

kidistB
fonte
1

1) Desinstalando o Entity Framework de todos projetos

2) Reinicie o Visual Studio

3) Reinstalando para todos os projetos necessários

e começou a trabalhar

Moji
fonte
1

Pode haver um caso em que você faz referência a tudo o que precisa e pode até Ir para a definição pressionando F12 na classe DbContext, que o leva ao espaço para nome System.Data.Entity, mas você ainda recebe esse aviso desagradável do compilador. Verifique se o Framework de destino do seu projeto e o da versão do Entity Framework que você está usando correspondem. Vá para Projeto-> Propriedades-> Guia Aplicativo. Altere a estrutura de destino (não é possível dizer exatamente qual, tentativa e erro ajudará.). Apenas meus dois centavos.

Mikayil Abdullayev
fonte
1

Também fico irritado com esse problema muitas vezes e finalmente encontro a solução. Vá para o arquivo edmx-> Atualizar modelo do banco de dados-> Atualizar-> Concluir. Solução Limpa-> Reconstruir Solução

Aayush Verma
fonte
0

você pode tentar no console do gerenciador de pacotes

PM> EntityFrameWork \ enable-migrations

Michael Felina
fonte
0

Como os outros sugeriram:

  1. Adicione as referências e diretivas corretas. Mas ainda não funciona? Talvez você tenha o mesmo problema que eu:

Dê uma olhada abaixo e veja se você pode me dizer o que está errado:

public class PanelLengthContext : DBContext { } ??!

Verifique se o nome da classe não está incorreto - (diferencia maiúsculas de minúsculas)!

  • DbContext é a ortografia correta.
  • é assim que deve ficar:
  • Verifique a ortografia. Não perca 20 minutos da sua vida como eu fiz.public class PanelLengthContext : DbContext {}

HTH

BKSpurgeon
fonte
0

Eu tenho o mesmo problema que você, não consigo implementá-lo na classe Controller enquanto ele funciona quando eu o coloco na classe model. Adicione esses códigos na parte superior da sua classe de controlador

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

Eu enfrentei o mesmo problema e adicionei o namespace

using Practiceusingentityframework.Models;

Depois de adicionar, está funcionando bem

Tente isso pode ajudá-lo a resolver seu problema

e antes disso, instale a estrutura da entidade do Nuget Manager

Aravindhan R
fonte