ASP.NET Core 1.1获得所有用户及其角色



我是.NET的新手,试图获取所有注册用户及其角色名称的列表,并使用ViewModel将其发送到视图。

这是ViewModel:

public class ApplicationUserListViewModel
{
    [Display(Name = "User Email Address")]
    public string UserEmail { get; set; }
    public  List<IdentityUserRole<string>> Roles { get; set; }
}

我尝试过将所有用户及其角色以及为每个用户制作一个视图模型,并将所有视图模型放在列表中以传递到视图:

var users =  _userManager.Users.ToList();
var userList = users.Select(u => 
                new ApplicationUserListViewModel {
                    UserEmail = u.Email,
                    Roles = u.Roles.ToList() }
                    ).ToList(); 

但是,当我显然分配给每个用户的角色时,每个用户总是为我提供0个角色。

您对自己进行了自我的了解,但是您的解决方案并不完美,因为它会引起性能问题。您正在向数据库执行一个请求以查询用户,然后在foreach循环中您执行一个新的查询,以使每个用户获得其相关角色,这确实很糟糕。如果您的X用户在数据库中,则最终将使用:

  • 一个查询以获取用户
  • x查询以获取每个用户的角色。

您可以通过在一个查询中包含相关角色来做得更好:

foreach (var user in _userManager.Users.Include(u => u.Roles).ToList())
{              
    list.Add(new ApplicationUserListViewModel {
        UserEmail = user.Email,
        Roles = user.Roles
    });
}

或以下:

var users = _userManager.Users.Include(u => u.Roles)
                        .Select(u => new ApplicationUserListViewModel {
                            UserEmail = user.Email,
                            Roles = user.Roles
                        })
                        .ToList();

ASP.NET核心身份的更新2.x

此解决方案对于ASP.NET Core Identity 2.x无效,因为IdentityUser不再包含Roles属性。请参阅此答案,以获取ASP.NET核心身份2.x。

好吧,我得到了这个工作。这可能不是应该完成的方法,但可以正常工作。

var list = new List<ApplicationUserListViewModel>();
foreach (var user in _userManager.Users.ToList())
{              
    list.Add(new ApplicationUserListViewModel() {
        UserEmail = user.Email,
        Roles = await _userManager.GetRolesAsync(user)
    });
}

相关内容

  • 没有找到相关文章

最新更新