如何在创建身份角色之前检查它是否存在?

How do I check to see if an Identity role exists before it is created?

在我的应用程序中,我正在创建身份角色,但想确保不存在同名角色。这是我试过的

public ActionResult Create()
{
    var Role = new IdentityRole();
    return View(Role);
}

[HttpPost]
public ActionResult Create(IdentityRole Role)
{
    var roleStore = new RoleStore<IdentityRole>(_context);
    var roleManager = new RoleManager<IdentityRole>(roleStore);
    if (!roleManager.RoleExists(Role.ToString()))
    {
        _context.Roles.Add(Role);
        _context.SaveChanges(); //error points here
        return RedirectToAction("Index");
    }
    else
    {
        TempData["message"] = "This role already exists. Please check your roles and try again";
        return RedirectToAction("Index");
    }

}

我知道它出错是因为它是重复的,因为它在 Role 不同时有效,但为什么它似乎没有使用 if/else 子句?

你的问题是你没有将角色名称传递给 Exists 函数,你传递的是 Role.ToString() 解析为 class 的名称,可能类似于Microsoft.AspNet.Identity.EntityFramework.IdentityRole。相反,你应该传递 Role.Name,像这样:

if (!roleManager.RoleExists(Role.Name))
{
    _context.Roles.Add(Role);
    _context.SaveChanges(); //error points here
    return RedirectToAction("Index");
}