我是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; }
}
当我尝试添加控制器时,我会收到以下错误。
请为此问题提出一些解决方法。它出了什么问题..
这是我添加Controller
的过程
答案 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)而不更新到更高版本。