Вы не можете сделать это напрямую через дизайнера.
Но это возможно в XML, используя DefiningQuery и Create и Delete sprocs. См. Этот старый пост в моем блоге для получения дополнительной информации: Связи с полезными нагрузками .
Единственное, что немного интересно, я предполагаю, что PK это просто UserId и PrivilegeId, что означает, что пользователь не может быть одновременно предоставлен или отклонен для определенной привилегии.
Так что, если вы напишите такой код:
Privilege p = user.Granted.First();
user.Granted.Remove(p);
user.Denied.Add(p);
ctx.SaveChanges();
Порядок обновления важен. поскольку вы используете DefiningQuery для обеих ассоциаций, EF не знает, что они связаны, и что ему нужно выполнить удаление, прежде чем он сможет выполнить обновление.
Так что вы можете столкнуться с нарушениями PK.
Способ решения этой проблемы заключается в том, чтобы использовать спрок «Вставка» и «Удалить» для каждой ассоциации. Вы можете по существу заставить их изменить текущую строку для пары «Пользователь и привилегия», если она существует, обновить ее с правильным значением IsGranted, если не создать это, то есть сделать это упор.
Дайте мне знать, как вы сюда попали
Alex