Asp.net mvc ASP.Net标识,角色中的用户始终为空

Asp.net mvc ASP.Net标识,角色中的用户始终为空,asp.net-mvc,asp.net-identity,asp.net-identity-2,Asp.net Mvc,Asp.net Identity,Asp.net Identity 2,在本文之后,我用一些自定义属性实现了ASP.Net标识- 除此之外,一切都很顺利。我希望获取特定角色下的用户(例如,获取管理员角色下的所有用户) 我尝试了以下方法来检索用户- var userRole = _roleManager.Roles.SingleOrDefault(m => m.Name == role.Name); var usersInRole = _userManager.Users.Where(m => m.Role

在本文之后,我用一些自定义属性实现了ASP.Net标识-

除此之外,一切都很顺利。我希望获取特定角色下的用户(例如,获取管理员角色下的所有用户)

我尝试了以下方法来检索用户-

            var userRole = _roleManager.Roles.SingleOrDefault(m => m.Name == role.Name);
            var usersInRole = _userManager.Users.Where(m => m.Roles.Any(r => r.RoleId == userRole.Id));
            var usersInRole2 = _userService.GetUsers().Where(u => u.Roles.Any(r => r.RoleId == userRole.Id));
其中
\u roleManager
属于
应用程序roleManager:roleManager
类型<代码>\u userManager的类型为
ApplicationUserManager:userManager

我无法在
\u userManager
\u userService
中获取用户下的角色

PS:
\u userService
是扩展IRepository的服务,IRepository查询
DbSet

我可以在表
ApplicationUserRoles
中看到角色被正确映射,当我执行
\u userManager.IsInRole(user.Id,“Admin”)时,我得到了预期的结果

这会出什么问题


拉胡尔

如果您使用的是实体框架,听起来您好像被延迟加载所困扰(因为角色正在添加到数据库中,但不是在从可查询文件请求时)

请尝试以下操作:

_userManager.Users.Include(x => x.Roles).Where(m => m.Roles.Any(r => r.RoleId == userRole.Id));

如果您使用的是实体框架,那么听起来您好像被延迟加载所困扰(因为角色正在被添加到数据库中,但不是在从可查询文件请求时)

请尝试以下操作:

_userManager.Users.Include(x => x.Roles).Where(m => m.Roles.Any(r => r.RoleId == userRole.Id));

我知道问题出在哪里了-

最初,表ApplicationUserRoles只有主键定义,没有外键映射(多对多映射)

我在ModelCreating的
中添加了这个

modelBuilder.Entity<ApplicationUserRole>().HasKey((ApplicationUserRole r) => new { UserId = r.UserId, RoleId = r.RoleId });

//added these definitions
modelBuilder.Entity<ApplicationUser>().HasMany(p => p.Roles).WithRequired().HasForeignKey(p => p.UserId);
modelBuilder.Entity<ApplicationRole>().HasMany(p => p.Users).WithRequired().HasForeignKey(p => p.RoleId);
这也解决了
更新数据库
异常


拉胡尔

我找到了问题所在-

最初,表ApplicationUserRoles只有主键定义,没有外键映射(多对多映射)

我在ModelCreating的
中添加了这个

modelBuilder.Entity<ApplicationUserRole>().HasKey((ApplicationUserRole r) => new { UserId = r.UserId, RoleId = r.RoleId });

//added these definitions
modelBuilder.Entity<ApplicationUser>().HasMany(p => p.Roles).WithRequired().HasForeignKey(p => p.UserId);
modelBuilder.Entity<ApplicationRole>().HasMany(p => p.Users).WithRequired().HasForeignKey(p => p.RoleId);
这也解决了
更新数据库
异常

拉胡尔