C# 无法从';字符串';至';Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole

C# 无法从';字符串';至';Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole,c#,asp.net-mvc,visual-studio-2017,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 !=

我对更新数据库相当陌生,我构建了以下代码,用新角色替换用户的角色。不过我在这个问题上犯了错误

    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的内容,并将其替换为从我的post操作发送的新id。

user.Roles.Add
方法在传递
IdentityUserRole
对象的
字符串
值(即
newRoleID
)时接受一个
IdentityUserRole
对象。您需要对代码进行以下更改:

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 });
    }

user.Roles.Add
方法在传递
string
值(即
newRoleID
)时接受一个
IdentityUserRole
对象。您需要对代码进行以下更改:

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 });
    }

Awesome-这么说来,删除也是一样的,我应该将我的删除代码改为
user.Roles.remove(newidentityUserRole{RoleId=oldRoleId})?是的,
remove
方法还需要一个
IdentityUserRole
对象,但是要删除的对象也需要附加到上下文,请检查编辑。刚刚选中。我相信我现在明白了。我确实将
oldRole.Id
更改为
oldRole.RoleId
。Id特定于
IdentityUser
,而.RoleId特定于
IdentityUserRole
.Awesome-因此,删除也是一样的,我应该将删除代码更改为
user.Roles.remove(新的IdentityUserRole{RoleId=oldRoleId})?是的,
remove
方法还需要一个
IdentityUserRole
对象,但是要删除的对象也需要附加到上下文,请检查编辑。刚刚选中。我相信我现在明白了。我确实将
oldRole.Id
更改为
oldRole.RoleId
。Id特定于
IdentityUser
,而.RoleId特定于
IdentityUserRole