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

本文关键字:继承 自定义属性 检索 AspNetUsers | 更新日期: 2023-09-27 18:04:11

我使用ASP。. NET Identity 2.0并创建两个不同的用户实体,从ApplicationUser继承,如在ASP中使用实体框架6实现继承。. NET MVC 5,但我无法达到这些自定义属性及其值(StudentNumber和Profession),同时达到在ApplicationUser (Name,姓氏)中定义的自定义属性。和想法吗?

这是我试图用于检索值Name, Surname, StudentNumberProfession的代码:

控制器:

public AccountController(ApplicationUserManager userManager, 
    ApplicationSignInManager signInManager)
{
    UserManager = userManager;
    SignInManager = signInManager;
}
private ApplicationUserManager _userManager;
public ApplicationUserManager UserManager
{
    get
    {
        return _userManager ?? HttpContext.GetOwinContext()
            .GetUserManager<ApplicationUserManager>();
    }
    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; }
}

我定义了不同的类型类,并从基类继承:

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

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

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

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

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

如果你想从基类中获取一个列表来捕获所有的用户,你可以做的不多。您只能从列表中获得列表中所有类共有的属性。

对于用不同的类填充视图,一些类类型的条件测试可以填充特定于该类的属性。

例如

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