我正在尝试返回属于不同IdentityRole
和不属于任何角色的ApplicationUser
列表。
因此,当我进行测试时,我注意到以下语句为我提供了系统中的所有用户。
UserManager.Users.Include(x => x.Roles).Where(u => u.Roles.Count == 0);
对我来说,该语句应该意味着,如果用户没有角色,它应该将其作为集合的一部分返回,但显然在调试时,所有用户都返回计数 0。
如果我使用适当的角色管理器来确定用户是否属于该角色,我会得到正确的答案:
UserManager.IsInRole(applicationUser.Id, "Administrator");
所以我试图弄清楚它返回一个空集是否正常。
同样在我的数据库中,aspnetuserroles
表的外identityusers
键似乎指向错误的列或代码更新到错误的列。 该表如下所示:
CREATE TABLE `aspnetuserroles` (
`UserId` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL,
`RoleId` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL,
`IdentityUser_Id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`UserId`,`RoleId`),
KEY `IdentityRole_Users` (`RoleId`),
KEY `IdentityUser_Id` (`IdentityUser_Id`),
CONSTRAINT `IdentityRole_Users` FOREIGN KEY (`RoleId`) REFERENCES `aspnetroles` (`Id`) ON DELETE CASCADE ON UPDATE NO ACTION,
CONSTRAINT `IdentityUser_Roles` FOREIGN KEY (`IdentityUser_Id`) REFERENCES `identityusers` (`Id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
UserId
列具有所有正确的用户 ID,但未被引用。IdentityUser_Id
列全部为 null,并且出于某种原因被引用。
任何建议将不胜感激。
我做了一些测试,发现在使用时
UserManager.Users.Include(x => x.Roles).Where(u => u.Roles.Count == 0);
我也得到了 0 个结果,即使我确定它不应该是。因此,我决定查看调试器中发生了什么。它实际上是错误的,但如果不看调试器,我就不知道。我不完全确定你想得到什么,但是通过像这样在最后抛出一个 ToList((
UserManager.Users.Include(x => x.Roles).Where(u => u.Roles.Count == 0).ToList();
我开始得到预期的结果。希望它也对你有用!此外,使用以下方法使我获得了所有相同的结果。祝你好运!
UserManager.Users.Where(x => x.Roles.Count == 0).ToList();