如何向用户添加多个角色

时间:2017-05-23 12:30:39

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

我正在尝试在ASP.NET Core中为我的ApplicationUser创建一个更新方法。

目标是我可以为用户分配新的角色列表。我试着想出这个方法:

    public async void Update(UserPresentationModel user)
    {
        try
        {
            var old = await GetUserById(user.Id);
            old.UserName = user.UserName;
            old.Email = user.Email;
            var oldRoles = await _userManager.GetRolesAsync(old);

            var userStore = new UserStore<ApplicationUser>(_context);

            await _context.SaveChangesAsync();

            foreach (var role in oldRoles)
            {
                await userStore.RemoveFromRoleAsync(old, role);
            }

            foreach (var role in user.Roles)
            {
                await userStore.AddToRoleAsync(old, role);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            throw;
        }
    }

然而,当我这样做时,我在AddToRoleAsync方法中得到了很多异常。有时它是一个空引用,有时它是一个对象处置异常。所以这显然不是最好的方法,我想知道更好的方法是什么?是否只有OverwriteRules方法?

1 个答案:

答案 0 :(得分:0)

您获得的错误很可能是由于您直接使用商店的方式。由于您已经有了userManager,因此您应该使用AddToRole方法,这些方法会自动为您保存更改并调用相应的存储方法。您不应该直接使用用户存储或自己调用保存更改。