“DbContext”类型或命名空间找不到。

164

我非常新手 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'(您是否缺少使用指令或程序集引用?)
  • 无法找到类型或命名空间名称'DbSet'(您是否缺少使用指令或程序集引用?)

我缺少了什么?


21
你是否使用NuGet添加了Entity Framework Code First的引用?这可能是解决引用问题最简单的方法。 - Ed Chapel
2
好的 - 在“解决方案资源管理器”树下,我右键单击“引用”->“添加库包引用”->“EFCodeFirst”->“安装”。这是你建议的吗?按照这些步骤后,我仍然遇到同样的问题。 - Chris
我已经将MVC 3工具升级到最新版本,并创建了一个教程项目,遵循http://www.asp.net/mvc/tutorials/getting-started-with-mvc3-part4-cs。在那个项目中,我没有这个问题,但是我不能让DbContext在我的旧项目中被接受,尽管这里和Darin下面的建议... - Chris
1
VS2017,EF6,关闭解决方案。重新打开解决方案。现在它可以正确识别DbContext。 - redwards510
1
打开程序包管理器控制台。选择工具 > NuGet程序包管理器 > 程序包管理器控制台。在程序包管理器控制台中,输入以下命令: install-package EntityFramework - Zahid Hasan
为什么这个问题被关闭了?谢天谢地还有一些答案在这里帮了忙,在一个过度热心的版主关闭它之前。 - Steve Smith
29个回答

202

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

我刚刚从MvcMusicStore应用程序中提取了它,你可以从http://mvcmusicstore.codeplex.com/下载。

这也是使用实体框架Code First和MVC的有用示例。


7
这是我的经验:尽管vs2010包管理器声称我已安装了4.2.0.0版本的EntityFramework.dll,但实际上并不存在。 在打开我的项目并通过“工具”、“库包管理器”、“程序包管理器控制台”运行安装命令后,自动添加了对EntityFramework的引用,随后我的构建成功了。谢谢@Shahzad! - gerryLowry
7
谢谢您的帮助。我希望微软有一天能够使他们自己的软件在Windows上更易安装!不可思议的是,人们需要去很多地方才能找到所需的内容并弄清它们如何相互配合。NuGet、MS下载站、留言板、书籍等等,真是非常耗费时间的过程。 - NoChance
24
你最好使用NuGet(软件包管理器)将Entity Framework(等等)引入你的项目中。 - kingdango
2
有时候你需要重新启动Visual Studio才能使安装生效。这也是我的情况。 - Bedouin
3
打开“包管理器控制台”,并粘贴以下内容:Install-Package EntityFramework。该指令将安装Entity Framework软件包。 - user2862542
显示剩余3条评论

73
您需要在项目中引用System.Data.Entity程序集,或安装EntityFramework NuGet包,它将为您设置一切。

1
Darin,你能解释一下怎么做吗? - Chris
11
@Chris Dickinson,在项目中右键单击“References”项,然后选择“Add Reference...”。接着在“.NET”选项卡中,选择“System.Data.Entity”。如果您想使用NuGet,则右键单击“References”项,然后选择“Add Library Package Reference...”,在在线选项卡中搜索“EntityFramework”。 - Darin Dimitrov
2
我按照你的两个步骤做了,但问题仍然存在... - Chris
3
你是否使用了NuGet来安装EntityFramework?它会在你的解决方案目录旁边创建一个名为“packages”的文件夹。在其中你会找到“EntityFramework.4.1.10331.0”文件夹。在“Libs”文件夹中,你会发现“EntityFramework.dll”。使用“浏览”选项卡添加对该dll的引用。请参阅我下面的答案,我也是这样做的。 - Amitd
8
我在 VS2012 中选择了 TOOLS > Library Package Manager > Package Manager Console,然后在提示符下键入 install-package EntityFramework。操作完美无误。 - Peter Gluck
显示剩余2条评论

19

简要说明:应该是DbContext,而不是DBContext,即'b'应小写。我发现这个问题是因为我的智能感知(Intelesense)没有起作用,直到我尝试输入完整的命名空间System.Data.Entity...和名称后,最后才建议选择小写'b'选项:

System.Data.Entity.DbContext


1
我一直在查看有关System.Data.Entity的所有参考资料,只是发现问题是大写字母“B”。+1 - F0r3v3r-A-N00b
是的,这解决了问题。只要执行了"Install-Package EntityFramework"这一步骤就可以了。谢谢,加1。 - Paceman

11
我是一名有用的助手,可以进行文本翻译。以下是需要翻译的内容:

我在使用VS2010时遇到了同样的问题。 我知道这不是一个真正的答案,但我想这可能会帮助某些人。 我通过使用DBContext的完全限定名称来解决了这个问题。

而不是

public class MachineDbContext : DbContext

我用了
public class MachineDbContext : System.Data.Entity.DbContext

我重新构建了这个项目。突然间,VS变得很高兴,我甚至可以删除完全限定名称,只使用DBContext。


这对我有用,但是似乎非常奇怪,即使using语句已经存在,我仍然需要完全限定DbContext。有人知道为什么会发生这种情况吗? - Fabio S.
或者 Microsoft.EntityFrameworkCore.DbContext - 对我有用 :) - eden m

9
我也曾遇到相同的问题... 通过包管理器控制台安装EF成功解决了我的问题。
命令如下:Install-Package EntityFramework

5

如果您的编译器无法识别

  • System.Data.Entity.Infrastructure
  • DbContext
  • DbSet
  • 等等,

请确保

  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..可能在这里 "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\"
如果您已经有它..只需添加一个'.net'引用即可。
注意:如果您使用 NuGet,它会在解决方案目录旁边创建一个名为“packages”的文件夹。您将在其中找到“EntityFramework.4.1.10331.0”文件夹。在“Libs”文件夹中,您将找到“EntityFramework.dll”。使用浏览选项卡添加引用并选择上述dll。 点击此处

Snap for the same


4

这很方便:

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

4

我正在使用Visual Studio 2010 Express,并添加一个对C:\Program Files\Microsoft ADO.NET Entity Framework 4.1\Binaries\EntityFramework.dll的引用解决了这个问题。


3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接