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
。