我有一个带有EF 2.1应用程序的.NET Core 2.1,我想直接查询现有的ASP.NET MVC数据库以获取用户和角色。
具体地说,我想传入代表角色名称的字符串数组,并找到这些角色中用户的不同列表。
我有目前可以使用的代码,但感觉效率很低-我基本上遍历Roles数组并获取所有用户的列表,然后执行Union
var accounts = GetAllUsersInRole("Accounts").ToList();
var managers = GetAllUsersInRole("Manager").ToList();
users = (managers.Union(accounts).ToList();
public IQueryable<ApplicationUser> GetAllUsersInRole(string roleName)
{
var idsWithPermission = _context.AspNetRoles.Where(x => x.Name == roleName)
.Select(p => p.UserId);
var users = _context.AspNetUsers.Where(u => idsWithPermission.Contains(u.Id)).ToList();
return users.AsQueryable();
}
我希望我错过了使用EF2.1轻松实现这一目标的方法
答案 0 :(得分:1)
最简单的方法是使用ASP.NET Identity提供的UserManager
。
private UserManager<ApplicationUser> _userManager;
public AccountController(UserManager<ApplicationUser> userManager) {
_userManager = userManager;
}
如果您已经在Startup.cs中正确设置了身份,则UserManager
应该自动在DI容器中注册
然后您要做的就是致电await _userManager.GetUsersInRoleAsync(rolename);