【发布时间】:2016-09-23 13:56:59
【问题描述】:
我在MVC5 项目中使用ASP.NET Identity 2,有两种类型的用户类,分别称为Student 和Coordinator,如下所示。另一方面,我尝试遵循TPH (Table Per Hierarchy) 方法,以便为两种类型的用户使用相同的实体。
public class Student : ApplicationUser
{
public int? Number { get; set; }
}
public class Coordinator : ApplicationUser
{
public string Room { get; set; }
}
public class ApplicationUser : IdentityUser<int, ApplicationUserLogin,
ApplicationUserRole, ApplicationUserClaim>, IUser<int>
{
//Custom Properties
public string Name { get; set; }
public string Surname { get; set; }
//code omitted for brevity
}
由于ApplicationUser 已经从IdentityUser 继承,我没有将其创建为abstract 类,并且没有将其添加到我的DbContext 中,如下所示:
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
另一方面,还有另一个实体具有 Student (not ApplicationUser) 作为导航属性,如下所示:
public class Grade
{
[Key]
public int Id { get; set; }
public int Grade { get; set; }
//Navigation properties ===========================
public virtual Experiment Experiment { get; set; }
public virtual Student Student { get; set; }
//public virtual ApplicationUser User { get; set; }
//=================================================
}
}
但是,在将 DbSet 添加到 DbContext 时遇到 “不支持每种类型的多个对象集。对象集 'ApplicationUsers' 和 'Users' 都可以包含类型的实例'Xxxx.ApplicationUser'。” 错误。那么,关于上述方法是否有任何错误?我应该在DbContext 中使用 DbSet,我应该将 ApplicationUser 作为导航属性添加到 Grade 实体吗?任何帮助将不胜感激...
【问题讨论】:
-
@ChrisPratt 你对这个问题有什么想法吗?
-
@DavidG 您能否看一下这个问题,因为您之前已经对我的类似问题有过意见?谢谢...
标签: asp.net-mvc entity-framework ef-code-first asp.net-identity table-per-hierarchy