AddToRoleAsync 找不到角色

AddToRoleAsync fails to find Role

我有一个使用 Asp.net Core Identity 的小型测试应用程序。 在启动时,我检查某些系统角色是否到位:

if(await _roleManager.FindByNameAsync(“SYSADMIN”) == null)
{
  _context.Roles.Add(new IdentityRole(“SYSADMIN”));
  await _context.SaveChangesAsync();
}

然后我检查并创建一个系统管理员帐户,如果它不存在:

var result = await _userManager.CreateAsync(adminUser, config["AdminPassword"]);

然后我尝试将该用户添加到 SYSADMIN 角色:

if (result == IdentityResult.Success)
{                  
  await _userManager.AddToRoleAsync(adminUser, “SYSADMIN”);
}

但是得到角色不存在的错误。但是,我可以在 AspNetRoles 中看到具有上述名称的角色,当我第二次 运行 应用程序时,它不会像 [=15] 一样进入 _context.Roles.Add() 部分=] returns角色。

有没有人以前见过这种行为或者知道为什么会失败?

编辑 我注意到数据库中的 NormalisedName 为 null - 这是用来匹配的吗?

所以这对我来说像是一个错误。如果您使用仅接受字符串的构造函数,它会填充名称,但不会填充规范化名称。规范化名称似乎在 AddToRoleAsync 中匹配,所以它永远不会工作。

我需要使用以下命令强制填充 NormalizedName:

_context.Roles.Add(new IdentityRole("SYSADMIN")
{
  NormalizedName = "SYSADMIN"
});

现在可以使用了。 我会向团队提交错误,希望它会得到修复。