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

时间:2016-08-27 08:34:41

标签: c# asp.net asp.net-mvc asp.net-identity asp.net-identity-2

我使用ASP.NET Identity 2.0并创建了两个不同的用户实体,这些用户实体继承自Implementing Inheritance with the Entity Framework 6 in an ASP.NET MVC 5上发布的ApplicationUser但在达到ApplicationUser中定义的自定义属性时无法访问这些自定义属性及其值(StudentNumber和Profession)(名字姓)。想法?

以下是我尝试用于检索值NameSurnameStudentNumberProfession的代码:

控制器:

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; }
}

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

例如

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