无法从“字符串”转换为“ Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole

时间:2019-04-25 16:31:03

标签: c# asp.net-mvc visual-studio-2017

我对更新数据库还很陌生,并且我构建了以下代码以将用户角色替换为新角色。我在这个问题上还是犯错了。

    public void UpdateRole(string id, string newRoleID)
    {
        var user = Users.FirstOrDefault(u => u.Id == id);
        var oldRoleId = user.Roles.FirstOrDefault().RoleId;
        if (user != null && oldRoleId != newRoleID)
        {
            user.Roles.Remove(oldRoleId);
            user.Roles.Add(newRoleID);
        }
    }

有人可以解释为什么我遇到此错误吗?我没有尝试转换任何东西。我正在尝试删除指定用户ID的RoleId内容,并将其替换为我的发布操作发送的新ID。

1 个答案:

答案 0 :(得分:2)

IdentityUserRole方法在传递string值(即newRoleID)时接受user.Roles.Add(new IdentityUserRole { RoleId = newRoleID }); 对象。您需要在代码中进行以下更改:

Remove

修改
IdentityUserRole方法也需要一个 var user = Users.FirstOrDefault(u => u.Id == id); var oldRole = user.Roles.FirstOrDefault(); if (user != null && oldRole.RoleId != newRoleID) { user.Roles.Remove(oldRole); user.Roles.Add(new IdentityUserRole { RoleId = newRoleID }); } 对象。但请注意,它也必须附加到上下文中。最简单的方法是通过以下代码:

$totalsum1=$row['undergraduate1']+$row['postgraduate2'];

$return .= 
'<tr>
  <td style="width: 4%; background:#F0F8FF; color:black;" align="center"> $i </td>
  <td style="width: 15%; background:#F0F8FF; color:black;" align="right"> {$row['uni']} </td>
  <td style="width: 14%; background:#F0F8FF; color:black;" align="center"> {$row['undergraduate1']} </td>
  <td style="width: 14%; background:#F0F8FF; color:black;" align="center"> {$row['postgraduate2']} </td>
  <td style="width: 14%; background:#F0F8FF; color:#00008B;" align="center">$totalsum1</td>
  </tr>';
$i++;