我正在为我的项目中的控制器工作。我试图做以下事情:
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 :(得分:2)
考虑使用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来构建对象并将其添加到用户。
答案 1 :(得分:1)
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
方法可以为您处理。
如果您确实不想使用异步方法,则可以使用非异步扩展。 https://msdn.microsoft.com/en-us/library/dn497483(v=vs.108).aspx