Структура сущности 4 многие ко многим обновляют

У меня есть 3 таблицы -

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

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

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

Спасибо.

1 ответ

Решение

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

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

Прежде всего, вы не должны обновлять идентификаторы.
Во-вторых, поскольку вы используете EF, вы должны попытаться мыслить с точки зрения объектов (или сущностей), а не "таблиц DB-многие-ко-многим-отображения". каждый User сущность имеет коллекцию Roles, Если вы удалите Role от User.Roles сбор и вызов context.SaveChanges()соответствующая запись будет удалена из UserRoles tabele. Точно так же, когда вы добавляете 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();

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

Другие вопросы по тегам