我们有一个方法来加载所有 ASP.NET Core Identity 用户
await _userManager.Users.ToListAsync()
我们还有一个方法来加载特定身份用户的角色:
IList<string> userRoles = await UserManager.GetRolesAsync(userId);
但是有没有办法在一次调用中加载所有身份用户及其角色?基本上是一次数据库调用。
因为如果我想加载所有用户并希望在 dto 中返回他们的角色,我将必须循环遍历所有用户,然后必须访问数据库以获取所有用户的角色,这是相当低效的
有没有什么方法可以在一次调用中为所有用户加载这些信息?
为了达到您的要求,您可以尝试使用 EF 创建查询。下面是示例代码,它将帮助您一次加载所有用户及其角色信息。
using Microsoft.EntityFrameworkCore;
var usersWithRoles = await _context. Users
. Include(u=> u.UserRoles)
. ThenInclude(ur => ur. Role)
. Select(u => new
{
User = u,
Roles = u.UserRoles.Select(ur => ur.Role.Name). ToList()
})
. ToListAsync();