无法从AspNetUsers表中检索inheritance的自定义属性值

我使用ASP.NET Identity 2.0并创建从ApplicationUserinheritance的两个不同的用户实体,如在ASP.NET MVC 5中使用entity framework6实现inheritance时发布的那样,但是在到达时我无法访问这些自定义属性及其值(StudentNumber和Profession) ApplicationUser(Name,Surname)中定义的自定义属性。 想法?

这是我试图用来检索值NameSurnameStudentNumberProfession

控制器:

 public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager) { UserManager = userManager; SignInManager = signInManager; } private ApplicationUserManager _userManager; public ApplicationUserManager UserManager { get { return _userManager ?? HttpContext.GetOwinContext() .GetUserManager(); } private set { _userManager = value; } } [AllowAnonymous] public ActionResult ListAccount(JQueryDataTableParamModel param) { var allUsers = UserManager.Users; //code omitted for brevity /* as there is no property StudentNumber and Profession in Users, I cannot reach these properties while reaching other custom properties */ var result = from c in allUsers select new[] { Convert.ToString(c.Id), c.Name, c.Surname, c.Email, c.PhoneNumber }; } 

楷模:

 public abstract class ApplicationUser : IdentityUser { //snip //Common properties public string Name { get; set; } public string Surname { get; set; } } 

我定义了不同的类型类并inheritance自基类:

 public class StudentUser : ApplicationUser { public string StudentNumber { get; set; } } public class ProfessorUser : ApplicationUser { public string Profession { get; set; } } 

创建从基类中的不同类创建的变量列表时,您将只能从基类访问属性。

如果您只创建一个对象类型的列表,那么您可以访问该inheritance类的添加属性,例如对于StudentUser,您将是

List students ,您将能够从这些项目中访问StudentNumbers。

如果您想要从基类中获取列表以捕获所有用户,那么您无能为力。 您只能从列表中获取列表中所有类共有的属性。

为了使用不同的类填充视图,对类类型进行一些条件测试将填充特定于该类的属性。

例如

 if(usertype == Student) room = user.Room;