如何在一次数据库调用中加载具有角色的 ASP.NET Core Identity 用户

问题描述 投票:0回答:1

我们有一个方法来加载所有 ASP.NET Core Identity 用户

await _userManager.Users.ToListAsync()

我们还有一个方法来加载特定身份用户的角色:

IList<string> userRoles = await UserManager.GetRolesAsync(userId);

但是有没有办法在一次调用中加载所有身份用户及其角色?基本上是一次数据库调用。

因为如果我想加载所有用户并希望在 dto 中返回他们的角色,我将必须循环遍历所有用户,然后必须访问数据库以获取所有用户的角色,这是相当低效的

有没有什么方法可以在一次调用中为所有用户加载这些信息?

c# .net-6.0 asp.net-core-identity
1个回答
0
投票

为了达到您的要求,您可以尝试使用 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();
© www.soinside.com 2019 - 2024. All rights reserved.