Asp.Net Identity 2.0返回角色(按NAME)和用户列表

时间:2016-08-03 13:57:52

标签: c# linq asp.net-identity

我担心我必须遗漏一些简单的东西,但是当我执行时:

var results = UserManager.Users.Where(u => u.mgr == appUser.org || appUser.org == "corp");

我得到一个符合我要求的IQueryable ApplicationUsers集合...... 除了...集合中的每个ApplicationUser都有一个Roles的属性(集合),它只包含UserId& RoleId而不是角色的名称。我相信在这个linq查询中添加一个.Include(" ???")应该允许我带回每个用户的角色名称......但我不能找到合适的表达方式到达那里。

如何检索分配中每个用户的角色名称?

1 个答案:

答案 0 :(得分:2)

ApplicationUser ASP.NET标识 属性 ApplicationUserRole 。此表是 ApplicationUsers ApplicationRoles 之间的多对多关系。如果您想获得有关reles的其他详细信息,则必须按照自己的说法使用Include

var results = UserManager
    .Users
    .Where(u => u.mgr == appUser.org || appUser.org == "corp")
    .Include(m => m.Roles.Select(r => r.Role));

正如@GeoffJames所说,您必须将using System.Data.Entity;添加到您的使用列表中。

更新

通常,您的自定义身份模型应如下所示:

public class ApplicationUserRole : IdentityUserRole
{
    public ApplicationUserRole()
        : base()
    { }

    public virtual ApplicationRole Role { get; set; }
}

ApplicationRole应该继承I dentityRole<string, ApplicationUserRole>

public class ApplicationRole 
: IdentityRole<string, ApplicationUserRole>
{
}

ApplicationUser应该继承IdentityUser<string, IdentityUserLogin, ApplicationUserRole, IdentityUserClaim>

public class ApplicationUser 
    : IdentityUser<string, IdentityUserLogin, ApplicationUserRole, IdentityUserClaim>
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    .............
}

您还可以看到我的回答here,这可能有所帮助。