2017-05-23 14 views
0

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メソッドで多くの例外が発生します。場合によってはnull参照であることもあります。だからこれは明らかにこれを行うための最良の方法ではありません、そして私はより良い方法が何だろうと思っていましたか? OverwriteRulesメソッドはありますか?

答えて

0

エラーは、ストアを直接使用している可能性が高いためです。あなたは既にuserManagerを持っているので、そこであなたのために自動的に変更を保存し、適切なストアメソッドを呼び出すAddToRoleメソッドを使うべきです。ユーザーストアを直接使用したり、変更を自分で保存したりしないでください。

関連する問題