Обновить сущность с отношением Один ко Многим - PullRequest
0 голосов
/ 21 октября 2011

У меня проблема с отношением один-ко-многим, и я пытаюсь обновить данные в одной из таблиц и таблицы ссылок.

  • У меня есть две таблицы (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);
        }
    }
}

1 Ответ

0 голосов
/ 21 октября 2011

Исключением является то, что некоторые роли уже загружены в контекст.Вы можете сделать это,

  foreach (long pkIDToAdd in roleList)
        {
            var role=  context.RiskTypes.FirstOrDefault(r=>r.id==pkIDToAdd );
            objUserInDb.Roles.Add(role);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...