有用户角色时Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole到return为空集正常吗?

Is it normal for Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole to return an empty set when there are user roles?

我正在尝试 return 属于不同 IdentityRole 和不属于任何角色的 ApplicationUser 的列表。

因此,当我进行测试时,我注意到以下语句为我提供了系统中的所有用户。

UserManager.Users.Include(x => x.Roles).Where(u => u.Roles.Count == 0);

对我来说,声明应该意味着如果用户没有角色,它应该 return 它作为集合的一部分但显然在调试时,所有用户 return 计数0.

如果我使用适当的 RoleManager 来确定用户是否属于该角色,我会得到正确的答案:

UserManager.IsInRole(applicationUser.Id, "Administrator");

所以我想弄清楚return一个空集是否正常。

同样在我的数据库中,aspnetuserroles table identityusers 的外键似乎指向错误的列或代码正在更新到错误的列。 table 看起来像这样:

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();