创建后,实体框架核心将角色分配给用户

时间:2019-05-26 20:56:20

标签: c# asp.net-core-2.2 entity-framework-core-2.2

我想知道在创建用户后如何将特定角色与该用户相关联

我在创建用户页面上有此

    public async Task<IActionResult> OnPostAsync()
    {
        if (!ModelState.IsValid)
        {
            return Page();
        }


        _context.Users.Add(User);

        await _context.SaveChangesAsync();

        _toastNotification.AddSuccessToastMessage("Utilizador Adicionado com sucesso");

        return RedirectToPage("./Index");
    }

我已经尝试过模型

    public User()
    {
        IsActivo = true;
        UserRoles.Add(new UserRole { RoleId = 4 });
    }

这并非不幸。

2 个答案:

答案 0 :(得分:1)

对于用户和角色,您都应该使用关联的管理器:UserManager<TUser>RoleManager<TRole>。除了管理人员要处理的简单持久性之外,还有很多事情需要发生,而直接添加到上下文中则不需要。不过,在这里,您只需要UserManager<TUser>就可以处理所有事情。

public class RegisterModel : PageModel
{
    private readonly UserManager<IdentityUser> _userManager;

    public RegisterModel(UserManager<IdentityUser> userManager)
    {
        _userManager = userManager;
    }

    ...
}

然后:

public async Task<IActionResult> OnPostAsync()
{
    if (!ModelState.IsValid)
    {
        return Page();
    }

    await _userManager.CreateUserAsync(User);
    await _userManager.AddToRoleAsync(User, "foo"); // where "foo" is the name of your role

    _toastNotification.AddSuccessToastMessage("Utilizador Adicionado com sucesso");

    return RedirectToPage("./Index");
}

答案 1 :(得分:0)

好吧,我花了一些时间重读实体框架教程,这对我有用

   public async Task<IActionResult> OnPostAsync()
   {
        if (!ModelState.IsValid)
        {
            return Page();
        }


        _context.Users.Add(User);
        _context.UserRoles.Add(new UserRole { User = User, Role = _context.Roles.FirstOrDefault(r => r.Nome == "User")});

        await _context.SaveChangesAsync();

        _toastNotification.AddSuccessToastMessage("Utilizador Adicionado com sucesso");

        return RedirectToPage("./Index");
    }