我使用ASP.NET Identity 2.0并在Implementing Inheritance with the Entity Framework 6 in an ASP.NET MVC 5上发布了两个从ApplicationUser继承的不同用户实体,但是在达到ApplicationUser(Name,Surname)中定义的自定义属性时,我无法访问这些自定义属性及其值(StudentNumber和Profession) . 想法?
这是我试图用来检索值的代码 Name
, Surname
, StudentNumber
和 Profession
:
Controller:
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 };
}
Models:
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 回答
创建从基类中的不同类创建的变量列表时,您将只能从基类访问属性 .
如果仅创建一个对象类型的列表,则是,您可以访问该继承类的添加属性,例如对于StudentUser,你会的
List<StudentUser> students
,您将能够从这些项目中访问StudentNumbers .如果您想要从基类中获取列表以捕获所有用户,那么您无能为力 . 您只能从列表中获取列表中所有类共有的属性 .
为了使用不同的类填充视图,对类类型进行一些条件测试将填充特定于该类的属性 .
对于例如