找不到类型或名称空间名称'DbContext'[关闭]


150

我是ASP.NET MVC(3)的新手,并且很难解决Visual Studio中的生成错误:

找不到类型或名称空间名称“ DbContext”(您是否缺少using指令或程序集引用?)

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

我得到的两个错误是:

  • 找不到类型或名称空间名称“ DbContext”(您是否缺少using指令或程序集引用?)
  • 找不到类型或名称空间名称“ DbSet”(您是否缺少using指令或程序集引用?)

我想念什么?


20
您是否使用NuGet添加了Entity Framework Code First参考?这可能是解析引用的最简单方法。
Ed Chapel

2
好的-在解决方案资源管理器树下,我右键单击了引用->添加库软件包引用-> EFCodeFirst->安装。这是您的建议吗?按照这些步骤后,我仍然有同样的问题。
克里斯,

同时,我将MVC 3 Tools更新到最新版本,并在asp.net/mvc/tutorials/getting-started-with-mvc3-part4-cs之后创建了一个教程项目。在那个项目中,我没有这个问题,但是尽管在这里和下面的达林提出了建议,但我无法让DbContext在我的旧项目中被接受……
Chris

VS2017,EF6,关闭解决方案。重新打开解决方案。现在,它可以正确识别DbContext。
redwards510

1
打开程序包管理器控制台。选择工具> NuGet软件包管理器>软件包管理器控制台。在Package Manager控制台中,输入以下命令:install-package EntityFramework
Zahid Hasan

Answers:


200

我遇到过同样的问题。原来,您需要EntityFramework.dll引用(而不是System.Data.Entity)。

我只是从MvcMusicStore应用程序中将其拉出的,您可以从以下网址下载该应用程序:http ://mvcmusicstore.codeplex.com/

这也是如何将实体框架代码优先用于MVC的有用示例。


7
这是我的经验;即使vs2010程序包管理器声称我已安装4.2.0.0,也不存在用于4.2.0.0的EntityFramework.dll。在vs2010中打开我的项目后,通过工具,库软件包管理器,软件包管理器控制台运行安装命令会自动将对EntityFramework的引用添加到EntityFramework中,并且我的后续构建成功完成。谢谢@Shahzad!
gerryLowry'2

7
谢谢你的帮助。我希望微软有一天能使在其Windows上安装自己的软件更加容易!令人惊讶的是,人们必须去多少地方才能确定需要什么以及它们如何相互融合。NuGet,MS下载站点,留言板,书籍等……的确是非常高效的时间。
NoChance 2012年

23
最好的选择是使用NuGet(程序包管理器)将Entity Framework(等)拉入项目。
kingdango 2012年

2
有时您需要重新启动Visual Studio才能使安装工作。这是我的情况。
贝都因人2014年

3
打开Package Manager控制台并粘贴:Install-Package EntityFramework
user2862542

71

您需要参考System.Data.Entity您的项目或安装EntityFrameworkNuGet软件包,它将为您设置所有内容。


1
达林,你能解释一个人怎么做吗?
克里斯,

11
@Chris Dickinson,右键单击References项目中的项目,然后选择Add Reference...。然后在.NET选项卡中,选择System.Data.Entity。如果要使用NuGet,请右键单击该References项目,然后选择Add Library Package Reference...,然后在“联机”选项卡中搜索EntityFramework
Darin Dimitrov

1
我遵循了您的所有步骤,但是问题仍然存在...
克里斯(Chris)

3
您是否使用NuGet安装EntityFramework?它在解决方案目录旁边创建了一个文件夹“ packages”。您将在其中找到“ EntityFramework.4.1.10331.0”文件夹。在“ Libs”文件夹中将找到“ EntityFramework.dll”。使用“浏览”选项卡添加对它的引用,然后选择上面的dll。请参阅下面的答案。
2011年

7
TOOLS > Library Package Manager > Package Manager Console在VS2012中选择并install-package EntityFramework在提示符下键入。工作完美。
Peter Gluck 2013年

17

请注意。它是DbContext,而不是DBContext。即带有小写字母“ B”。我发现此问题是因为在我尝试输入全名空间System.Data.Entity ...和name之前intelesense无法正常工作时,我遇到了同样的问题,最后它建议使用小写的'b'选项:

System.Data.Entity.DbContext


1
我已经遍历了有关System.Data.Entity的所有引用,才发现问题是大写的“ B”。+1
F0r3v3r-A-N00b 2015年

是的,这解决了。提供的“安装包EntityFramework”步骤已完成。谢谢,+ 1。
Paceman

9

我在使用VS2010时遇到了同样的问题。我知道这并不是真正的答案。我只是认为这可能对某人有帮助。我通过使用DBContext的完全限定名称来解决它。

代替

public class MachineDbContext : DbContext

我用了

public class MachineDbContext : System.Data.Entity.DbContext

并重建了项目。突然,VS很高兴,我什至可以删除完全限定的名称,而仅使用DBContext。


完全限定的名称...如何可以忘记使用指令添加......
x-code

8

我遇到了同样的问题...从Package Manager Console安装EF对我来说有效

命令是: Install-Package EntityFramework


4

如果您的编译器无法识别

  • System.Data.Entity.Infrastructure
  • DbContext
  • 数据库集
  • 等,

确保

  1. 您在计算机上安装了Entity Framework 4.1;
  2. 在您的.csproj文件中,您具有以下参考

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

    在元素内

    <ItemGroup>
      ...
    </ ItemGroup>
    

    包含对其他程序集的引用。


4

我有同样的问题..我有VS2010 Express。

(注意:如果您看到此问题,请尝试检查对EntityFramework.dll的引用。可能丢失了。)

以下为我解决了它。

我安装了最新的MVC 3工具更新,
然后安装了EntityFramework 4.1
或使用NUGet。从Visual Studio 2010 Express开始(工具->库包管理器->添加库包参考->选择在线-> EntityFramework)

奇怪的是,这没用。。所以我不得不手动添加对“ EntityFramework.dll”的引用,
尝试搜索dll
。 \ v4.0 \“

如果您已经拥有它,只需添加一个“ .net”引用。

注意:如果使用NuGet,它将在解决方案目录旁边创建一个文件夹“ packages”。您将在其中找到“ EntityFramework.4.1.10331.0”文件夹。在“ Libs”文件夹中,您将找到“ EntityFramework.dll”。使用“浏览”选项卡
添加对它的引用,然后选择上面的dll。

捕捉相同


4

我正在使用Visual Studio 2010 Express并添加参考来C:\Program Files\Microsoft ADO.NET Entity Framework 4.1\Binaries\EntityFramework.dll解决该问题。


4

这真的很方便:

  1. 在解决方案资源管理器中选择ProjectNAme项目。
  2. 在工具菜单上,选择带有子菜单的库包管理器。
  3. 在子菜单中,选择“程序包管理器控制台”。
  4. 在控制台的PM提示符下,键入install-package EntityFramework,然后按Enter。


3

您的项目无法解析EntityFramework类,除非您未将其添加到项目中。要添加EntityFramework支持,您必须遵循以下步骤:工具-> Nuget程序包管理器->管理用于解决方案浏览的Nuget程序包EntityFramework它显示了最新的稳定EntityFramework版本。当前6.1.3是最新版本为所选项目安装它。



2

Visual Studio Express SP1右键单击“解决方案资源管理器”>“参考”>“添加库包参考”>“ EntityFramework”


2

请改用CTP5,它是API有所更改的较新版本。您必须添加对CTP目录中安装的EntityFramework.dll的引用-默认为:32位系统的c:\ Program Files \ Microsoft ADO.NET实体框架功能CTP5 \ Binaries \ EntityFramework.dll。在64位系统上,它将放置在程序文件(x86)中。


2

当我分支代码时,这发生在我身上。要修复它,我在Visual Studio中右键单击了我的项目,选择了“管理Nu-get程序包”,卸载了EntityFramework,然后重新安装了它。问题解决了


2

我只是遇到了这个问题,其他解决方案都不适合我。我使用的是Visual Studio 2010,解决方案中有两个项目:UIProject和DataAccessProject。UIProject具有对DataAccessProject的引用。

我的UIProject面向.Net Framework 4,但出于某种原因,我的DataAccessProject面向.Net Framework 3.5。

  • 我将两个项目都更改为以.Net Framework 4为目标
  • 卸载然后重新安装实体框架NuGet包。

问题解决了。现在我同时引用了EntityFramework和System.Data.Entity


2

我有同样的问题。在添加对entityframework的引用后,我不得不重写“ DBContext”,它解决了该问题。
这意味着Visual Studio无法自动识别该类并等待其重新输入。因此最好先添加参考,然后再实现代码。VS 2013-终极使用


2

我必须先通过PM控制台卸载EntityFramework(卸载程序包EntityFramework(显然不区分大小写)),然后再次安装(安装程序包EntityFramework)


1

我遇到了这个问题,阅读上面的答案并下载了entityframework.ddl,但发现它已被引用。所以我添加了名称空间,问题就解决了

使用System.Data.Entity;

我正在使用安装的Visual Studio 2010 SP1


1

引用了objectframework.dll,两个system.data.entity都起作用。


1

我有同样的错误,但是问题只是我的模型偶然的问题。

我不小心把...

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

...在模型类中


1
那些3行实际上在班级内部?
Nate-Wilkins

1

作为替代方法,您可以在这里 -说明如何安装任何必需的dll。

或者您可以下载NuGet并从VS管理它


1

右键单击您的参考并去管理NuGet软件包,然后选择全部在线,然后在搜索文本框中键入Entity Framework并安装NuGet软件包源。


1

1)从全部卸载实体框架项目中

2)重新启动Visual Studio

3)重新安装到所有必需的项目

并且它开始工作


1

在某些情况下,您可能需要引用所有内容,甚至可以通过在DbContext类上按F12转到“定义”,这会将您带到System.Data.Entity命名空间,但您仍然会收到此讨厌的编译器警告。确保您的项目的目标框架和您使用的实体框架版本相匹配。转到项目->属性->应用程序选项卡。更改目标框架(无法确切地说出哪一个,反复试验会有所帮助。)。只是我的两分钱。


1

我也对此问题感到非常恼火,终于找到了解决方案。从数据库->刷新->完成转到edmx文件->更新模型。清洁解决方案->重建解决方案



0

就像其他人建议的那样:

  1. 添加正确的引用和指令。但这仍然行不通吗?也许您遇到了与我相同的问题:

请在下面查看,看看是否可以告诉我哪里出了问题:

public class PanelLengthContext : DBContext { } ??!

确保类名没有拼写错误-(区分大小写)!

  • DbContext 是正确的拼写。
  • 它应该是这样的:
  • 检查拼写。不要像我一样浪费20分钟的生命。public class PanelLengthContext : DbContext {}

高温超导


0

我和您有同样的问题,当我将其放入模型类时,我无法在Controller类中实现它。将这些代码添加到控制器类的顶部

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

0

我遇到了同样的问题,然后添加了名称空间

using Practiceusingentityframework.Models;

添加后工作正常

试试这个可能会帮助您解决问题

并在此之前从Nuget Manager安装实体框架

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.