C# 为什么一个角色显示为;“不存在”;即使存在于数据库中(asp.net mvc)

C# 为什么一个角色显示为;“不存在”;即使存在于数据库中(asp.net mvc),c#,asp.net-mvc,asp.net-identity,C#,Asp.net Mvc,Asp.net Identity,我试图在注册用户时将用户添加到角色中,因此我在migrations.cs类中为角色添加种子并使用下面的代码更新数据库 var RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context)); string[] roleNames = { "Admin", "Reviewer", "User" }; IdentityResult

我试图在注册用户时将用户添加到角色中,因此我在migrations.cs类中为角色添加种子并使用下面的代码更新数据库

        var RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
        string[] roleNames = { "Admin", "Reviewer", "User" };
        IdentityResult roleResult;
        foreach (var roleName in roleNames)
        {
            if (!RoleManager.RoleExists(roleName))
            {
                roleResult = RoleManager.Create(new IdentityRole(roleName));
            }
        }
var角色管理器=新角色管理器(新角色存储(上下文));
字符串[]角色名称={“管理员”、“审阅者”、“用户”};
识别结果角色结果;
foreach(roleName中的变量roleName)
{
如果(!RoleManager.RoleExists(roleName))
{
roleResult=RoleManager.Create(新的IdentityRole(roleName));
}
}
我试图在accountcontroller类中将角色名称提取到dropdownlist中

public ActionResult Register()
{
    var model = new RegisterViewModel();
        model.RolesList = new SelectList(_db.Roles, "Id", "Name");

    return View(model);
}

//
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
    if (ModelState.IsValid)
    {
        var user = new ApplicationUser()
        {
            UserName = model.UserName,
            PortalUser = new PortalUser()
            {
                Email = model.Email,
                UserName = model.UserName
            }
        };
        var result = await UserManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            UserManager.AddToRole(user.Id, model.Roleid);                
            return RedirectToAction("Index", "ApplicationReview");
        }
        else
        {
            AddErrors(result);
        }
    }
    model.RolesList = new SelectList(_db.Roles, "Id", "Name");
    // If we got this far, something failed, redisplay form
    return View(model);
}
public ActionResult寄存器()
{
var model=new RegisterViewModel();
model.RolesList=新选择列表(_db.Roles,“Id”,“Name”);
返回视图(模型);
}
//
//职位:/Account/Register
[HttpPost]
[异名]
[ValidateAntiForgeryToken]

公共异步任务

第二个参数是字符串角色,如
中的“Reviewer”
中所示,而不是角色的id。它出错了,因为实际上没有一个角色的
Name
等于该GUID


请参阅:

您确定正在查找正确的数据库吗?@ragerory我确定,因为用户信息正确保存在dbo.AspNetUsers中table@ibnhamza我有同样的问题,但我不能用@ChrisPratt-answer解决它。我的代码和你的代码的区别在于,我已经在
Startup.cs
file.Omg!!这是一个严重的疏忽。谢谢你指出没问题。从逻辑上讲,您应该能够按照自己的方式来完成任务,但Microsoft对待身份角色的方式与对待其他类型角色的方式大不相同。我认为这主要是为了向后兼容,或者至少是为那些在ASP.NET中使用auth之前的迭代的人提供一个熟悉的API。