AddToRoleAsync无法找到角色

时间:2016-11-23 12:56:37

标签: asp.net-core asp.net-identity-3

我有一个使用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中看到具有上述名称的角色,当我第二次运行该应用时,它不会进入_context.Roles.Add()部分,因为_roleManager.FindByNameAsync返回作用。

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

修改 我注意到,虽然在DB中,NormalisedName为null - 它是用来匹配的吗?

1 个答案:

答案 0 :(得分:3)

所以这看起来像是一个错误。如果使用仅包含字符串的构造函数,则会填充名称,但不会填充规范化名称。似乎规范化的名称在AddToRoleAsync中匹配,因此它永远不会起作用。

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

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

现在正在努力。 我会向团队提交一个错误,希望它能得到解决。