与此问题类似:How to extend available properties of User.Identity
当用户登录时,我想加载我的用户与之关联的部门。我猜测我会向ApplicationUser
类添加一个属性,如下所示:
public class ApplicationUser : IdentityUser<Guid, GuidUserLogin, GuidUserRole, GuidUserClaim>
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(ApplicationUserManager manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
return userIdentity;
}
public IEnumerable<Department> Departments { get; set; }
}
我的问题是我将如何/在哪里填充集合,然后我将如何在控制器中访问该属性。根据我的理解,声明对于简单类型(例如Id)是可以的,但是它们可以与集合一起使用吗?
我假设一旦我加载了这个属性,每次我需要关于用户的信息时,我都可以查询集合而不会访问数据库 - 这通常是。
任何帮助表示感谢。
答案 0 :(得分:0)
首先,创建集合实体,即Department。然后在其中引用ApplicationUser实体的Id。
假设您首先使用实体框架代码,这是一个示例:
public class ApplicationUser : IdentityUser<Guid, GuidUserLogin, GuidUserRole, GuidUserClaim>
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(ApplicationUserManager manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
return userIdentity;
}
public ApplicationUser()
{
Departments = new Collection<Department>();
}
public ICollection<Department> Departments { get; set; }
}
public class Department
{
public string UserId { get; set; }
public int DepartmentId { get; set; }
public ApplicationUser User { get; set; }
protected Department()
{
}
}