Asp.net mvc 3 Can';t添加从其他类继承的模型的控制器

Asp.net mvc 3 Can';t添加从其他类继承的模型的控制器,asp.net-mvc-3,entity-framework,inheritance,Asp.net Mvc 3,Entity Framework,Inheritance,我使用的是实体框架和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; } }

我使用的是实体框架和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; }
}
公共类人物
{
公共int Id{get;set;}
公共字符串名称{get;set;}
}
公共类用户:Person
{
公共字符串电子邮件{get;set;}
公共字符串密码{get;set;}
}
公共类上下文:DbContext
{
公共DbSet PersonSet{get;set;}
}
当我尝试使用带有读/写操作和视图的模板
Controller添加控制器
User
时,使用实体框架
我得到以下错误:

“User”不是指定的“Context”类的一部分,无法修改“Context”类以向其添加“DbSet”属性。(例如,“Context”类可能位于已编译的程序集中。)


我可以将
public DbSet UserSet{get;set;}
添加到
上下文
中,但我认为这不是正确的方法。

目前您的
用户
不是持久化类型,因为上下文不知道该类型,所以无法使用持久化实体类型的支架为
用户
类型创建控制器。如果要在数据库中存储
用户
及其属性,请将其添加到上下文中:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>();
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity();
}

如果您不想将
用户
持久化到数据库,则不能使用scaffolding来创建控制器。

如果不将用户添加到DbContext,您将在何处存储电子邮件和密码?只需将PersonSet添加到上下文中,我就可以通过执行
Context.PersonSet.OfType()
@vicentedealencar,我面临着同样的错误,你是如何解决的?这是我的问题,这与在DbContext中定义公共DbSet UserSet{get;set;}有什么区别?该集合是在上下文中公开的公共属性。这只是提供给上下文的映射,但两个操作的结果是相同的——上下文知道用户实体。这就是我的想法。但是我想不出为什么有人喜欢定义一个映射而不将它作为属性公开。就个人而言,我宁愿使用属性来访问集合,也不愿使用泛型方法。