У меня проблема с отношением один-ко-многим, и я пытаюсь обновить данные в одной из таблиц и таблицы ссылок.
- У меня есть две таблицы (User, Roles) и одна таблица ссылок (UserRoles).
- У пользователя много ролей.
- Роли заданы заранее, и есть только 3 строки, как показано ниже.
Я хочу обновить пользователя с помощью ролей. Я не могу сделать с помощью следующего кода.
Пожалуйста, поделитесь своими данными.
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);
}
}
}