ASP.NET Core 1.1获取所有用户及其角色
问题描述:
我是.NET新手,尝试获取所有注册用户及其角色名称的列表,并使用viewModel将它们发送到视图。ASP.NET Core 1.1获取所有用户及其角色
这里的视图模型:
public class ApplicationUserListViewModel
{
[Display(Name = "User Email Address")]
public string UserEmail { get; set; }
public List<IdentityUserRole<string>> Roles { get; set; }
}
我想这对于让所有用户与他们的角色一起,使一个ViewModel为每个用户,并把所有的视图模型的列表传递给视图:
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();
答
嗯,我得到了这个工作。这可能不是应该如何做,但它工作正常。
List<ApplicationUserListViewModel> list = new List<ApplicationUserListViewModel>();
foreach (var user in _userManager.Users.ToList())
{
list.Add(new ApplicationUserListViewModel() {
UserEmail = user.Email,
Roles = await _userManager.GetRolesAsync(user)
});
}
'_userManager.Users.Include(U =>ü。角色)' –