我遇到了一对多关系的问题,我正在尝试更新其中一个表和链接表中的数据。
我想用角色更新用户。我无法使用以下代码。 请分享您的意见。
Original
User : John
Roles : Admin, User
Update to
User : John
Roles : User
这是表结构
User
UserID : Pk
Name
Roles //Data is not added in this table, Data already exists in this table
RoleID : Pk
Name
RoleID Name
1 Admin
2 User
3 None
UserRoles
UserID : PK
RoleID : Pk
相应的实体
User
UserId
Name
EntityCollection<Role> Roles
Role
RoleId
Name
EntityCollection<User> Users
我尝试使用以下代码
public void update(int userId, string newusername, list<int> roleList)
{
using (DBEntites context = new DBEntites())
{
User objUserInDb = new User();
objUserInDb.UserID = userId;
Context.Users.Attach(objUserInDb);
objUserInDb.Name = newusername;
objUserInDb.Roles.Clear();
// TRIED TO USE The remove method objUserInDb.Roles.Remove(entity),
// is returning false
foreach (long pkIDToAdd in roleList)
{
Role objRoleInDb = new Role();
objRoleInDb.RoleId = pkIDToAdd;
// GIVES EXCEPTION
//An object with the same key already exists in the ObjectStateManager.
//The ObjectStateManager cannot track multiple objects with the same
//
context.Roles.Attach(objRoleInDb);
objUserInDb.Roles.Add(objRoleInDb);
}
}
}
答案 0 :(得分:0)
异常是因为某些角色已经加载到上下文中。你可以这样做,
foreach (long pkIDToAdd in roleList)
{
var role= context.RiskTypes.FirstOrDefault(r=>r.id==pkIDToAdd );
objUserInDb.Roles.Add(role);
}