2017-04-17 85 views
0

我正在使用我的項目中的控制器。我試圖做到以下幾點:如何將IdentityUserRole轉換爲IdentityRole(ASP.NET Core)

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

一般情況下,你可以使用AddToRoleAsync()方法從UserManager對象來處理角色分配給用戶,而不是直接將它們的用戶對象本身。

// 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

IdentityUserRole對象在那裏將用戶鏈接到一個角色,您只需要創建一個新的實例。您還需要您要添加的角色的ID,例如:

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類此。它有一個AddToRoleAsync方法來處理這個問題。

如果您確實不想使用async方法,但可以使用非異步擴展。 https://msdn.microsoft.com/en-us/library/dn497483(v=vs.108).aspx

相關問題