структура сущности 4 многие ко многим обновляют - PullRequest
4 голосов
/ 31 августа 2010

у меня 3 таблицы -

User (Id, Name)
Roles (Id, Name)
UserRoles (UserId, RoleId)

Я думаю, они говорят сами за себя. Как обновить запись (UserId и RoleId) в UserRoles?

context.User.Roles дает мне список ролей, но как мне их обновить?

Спасибо.

1 Ответ

6 голосов
/ 02 сентября 2010

Из вашего комментария:

context.User.Roles дает мне список ролей. Я могу сделать для каждого и обновить идентификатор, но как мне обновить соответствующий UserId foreach RoleId в этот стол?

Прежде всего, вы НЕ должны обновлять идентификаторы.
Во-вторых, поскольку вы используете EF, вы должны попытаться мыслить с точки зрения объектов (или сущностей), а не «таблиц DB-многие-ко-многим-сопоставлениям». Каждая User сущность имеет коллекцию Roles. Если вы удалите Role из коллекции User.Roles и вызовете context.SaveChanges(), соответствующая запись будет удалена из таблицы UserRoles. Аналогично, когда вы добавляете объект Role в коллекцию User.Roles и сохраняете изменения, в таблице UserRoles будет создана новая запись.
Следующий пример может быть полезен для ясности:

var user = context.Users.Include("Roles").Where(u => u.Name == "User1").FirstOrDefault();
user.Roles.Remove(user.Roles.Where(r => r.Name == "Admin").FirstOrDefault());
context.SaveChanges();

(проверка на нулевую ссылку для простоты опущена).

...