无法添加从其他类继承的模型控制器
Posted
技术标签:
【中文标题】无法添加从其他类继承的模型控制器【英文标题】:Can't add controller of model that inherits from other class 【发布时间】:2012-05-26 21:01:37 【问题描述】:我正在使用 Entity Framework 和 MVC3,我的问题是如果模型继承自另一个类,我无法构建控制器。
例子:
public class Person
public int Id get; set;
public string Name get; set;
public class User : Person
public string Email get; set;
public string Password get; set;
public class Context : DbContext
public DbSet<Person> PersonSet get; set;
当我尝试使用模板 Controller with read/write actions and views, using Entity Framework
添加控制器 User
时,我收到此错误:
“用户”不是指定的“上下文”类的一部分,无法修改“上下文”类以向其添加“DbSet”属性。 (例如,'Context' 类可能在已编译的程序集中。)
我可以将public DbSet<User> UserSet get; set;
添加到Context
,但我认为这不是正确的方法。
【问题讨论】:
如果不将User添加到DbContext中,你将把Email和Password存放在哪里? 通过将 PersonSet 添加到上下文中,我可以通过context.PersonSet.OfType<User>()
获得用户列表
@vicentedealencar ,我遇到了同样的错误,你是怎么解决的?这是我的问题MyQuestion
【参考方案1】:
目前您的User
不是持久类型,因为上下文不知道该类型,因此您不能使用持久实体类型的脚手架来为User
类型创建控制器。如果您想在数据库中存储 User
及其属性,请将其添加到您的上下文中:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
modelBuilder.Entity<User>();
如果您不想将User
持久化到数据库,则不能使用脚手架创建控制器。
【讨论】:
这和定义 public DbSet以上是关于无法添加从其他类继承的模型控制器的主要内容,如果未能解决你的问题,请参考以下文章
从父 UIViewController 类继承 UI 组件?