无法添加控制器

时间:2014-06-27 10:45:01

标签: c# asp.net asp.net-mvc entity-framework asp.net-mvc-4

我是MVC Web应用程序开发的新手。 我在添加模型和DbContext类后尝试添加控制器。

但是当我使用Entity框架尝试使用此控制器时,它会给我一个错误

Unable to cast object of type 'System.Data.Entity.Core.Objects.ObjectContext' to 'System.Data.Objects.ObjectContext'

我正在使用EF-6.1.1(最新更新)

以下是我的模型和上下文类..

 public class EmpDetails
    {
        [Key]
        public int Id { get; set; }

        public string EmpId { get; set; }


        public string EmployeeName { get; set; }
    }


 public class ModelContext : DbContext
    {
        public DbSet<EmpDetails> Employee { get; set; }
    }

当我尝试添加控制器时,我会收到以下错误。

enter image description here

请为此问题提出一些解决方法。它出了什么问题..

这是我添加Controller

的过程

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

实体框架在版本5和版本6之间带来breaking changes。为了使它完全开源,它们将所有库移出带外,它们现在完全位于NuGet中的EntityFramework程序集中。这样做的副作用是实体框架的许多名称空间发生了变化:

  

DbContext和Code First类型的命名空间没有更改。   这意味着对于许多使用EF 4.1或更高版本的应用程序,您不会   需要改变一切。

     

之前的ObjectContext类型   System.Data.Entity.dll已移至新的命名空间。这意味着   您可能需要更新您的using或Import指令才能构建   对抗EF6。

     

命名空间更改的一般规则是任何类型   System.Data。*被移动到System.Data.Entity.Core。*。换一种说法,   只需插入Entity.Core。在System.Data之后。例如:

     

System.Data.EntityException =&gt; System.Data.Entity.Core.EntityException   System.Data.Objects.ObjectContext =&gt;   System.Data.Entity.Core.Objects.ObjectContext   System.Data.Objects.DataClasses.RelationshipManager =&gt;   System.Data.Entity.Core.Objects.DataClasses.RelationshipManager

您看到错误的原因是您使用的是以前版本的MVC,该版本的目标是早期版本的Entity Framework。脚手架将采用旧的命名空间。

您可以尝试升级到最新版本的MVC,您的脚手架将再次运行。无论是EF6还是降级(我不推荐这个,它有很多非常棒的功能)。第三种选择是每次手动修复脚手架代码。

答案 1 :(得分:0)

使用ASP.Net MVC 3/4时,实体框架程序集(.dll)将自动使用较低版本(5.0.0.0)引用。当您将其更新为更高版本时,您需要进行显式类型转换才能获得此错误。解决此问题的一种方法是,使用现有版本的Entity Framework(5.0.0.0)而不更新到更高版本