2017-04-17 5 views
0

私は自分のプロジェクトのコントローラで作業しています。私は、次の操作を実行しようとしている:IdentityRole(ASP.NETコア)にIDUserRoleを変換する方法

string role = "something"; 
var newRole = new IdentityRole(); 

newRole = _DbContext.Roles.Where(r => r.Name == role).FirstOrDefault().; 
user.Roles.Add(newRole); 

はどうやら、user.Roles.Addは()唯一のパラメータとしてIdentityUserRoleがかかりますが、newRoleはタイプIdentityRoleです。どのように私は一方から他方に変換できますか?私がしたいことを達成する別の方法がありますか?

明示的にキャストが機能しません。

+0

データベースにロールを追加する、またはユーザーにロールを追加しようとしていますか? – DavidG

+0

ユーザに役割を追加する –

答えて

1

は一般のUserManager

を使用して考えてみましょう、あなたはユーザーオブジェクト自体に直接追加することとは対照的に、ユーザーに割り当てる役割を処理するためにUserManagerオブジェクトからAddToRoleAsync()メソッドを使用します。

// Example of instantiating the User Manager 
private readonly UserManager<ApplicationUser> _userManager; 
public AccountController(UserManager<ApplicationUser> userManager) 
{ 
     _userManager = userManager; 
} 

// Example of adding a user to a given role 
public void AddUserToRole(string userId, string role) 
{ 
     var user = _userManager.FindByIdAsync(userId); 
     if (user != null) 
     { 
      await _userManager.AddToRoleAsync(user, role); 
     } 
} 

のUserManagerクラスは、ユーザーについての関係や情報が適切に作成、更新、および必要に応じて永続化されることを保証する責任があるので、一般的に、それに責任のこれらのタイプを委任することが好ましいです。直接変換が

直接変換に関しては、あなたがDavidG's responseに同様のアプローチを使用して、単にオブジェクトを構築し、それをユーザーに追加するユーザーおよびロールからIDを使用することができますについて

+0

私は 'UserManager'をあなたに残したいと思います。 – DavidG

0

オブジェクトはロールにユーザーをリンクするためのオブジェクトです。ロールの新しいインスタンスを作成するだけです。

var roleName = "something"; 
var role = _DbContext.Roles.Single(r => r.Name == roleName); 
var userRole = new IdentityUserRole 
{ 
    UserId = user.Id, 
    RoleId = role.Id 
}; 

user.Roles.Add(userRole); 

しかし、あなたは本当にこのためUserManagerクラスを使用する必要があります。また、あなたは、たとえば、追加する役割のIDが必要になります。これはあなたのためにこれを処理するAddToRoleAsyncメソッドを持っています。

実際に非同期メソッドを使用したくない場合は、非同期拡張が利用できます。 https://msdn.microsoft.com/en-us/library/dn497483(v=vs.108).aspx

関連する問題