我正在尝试在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方法?
答案 0 :(得分:0)
您获得的错误很可能是由于您直接使用商店的方式。由于您已经有了userManager,因此您应该使用AddToRole方法,这些方法会自动为您保存更改并调用相应的存储方法。您不应该直接使用用户存储或自己调用保存更改。