Я изо всех сил пытался получить желаемый результат на основе простой модели данных. Может кто-нибудь взглянуть и поставить меня на правильный путь?
Я моделирую настраиваемую схему «разрешения на основе группы» в список Реквизиций. У меня есть одна таблица для хранения списка групп, одна таблица для хранения «членства» (GroupMembership) для групп (ы) и таблица для хранения того, какие разрешения (чтение / запись) групп (ы) имеют для заявки (ReqGroups). Я даже попробовал подход, основанный на базе данных, используя. NET framework, именно так я сгенерировал диаграмму БД. Это приводило к ошибкам циклической ссылки, когда я использовал сгенерированные модели в своем проекте. NET Core API.
Я могу легко представить желаемый результат через T- SQL:
SELECT r.*, x.Rights FROM Requisition r
INNER JOIN
(
SELECT rp.RequisitionID, rp.Rights from ReqGroup rp
INNER JOIN GroupMembership m on m.GroupID = rp.GroupID
WHERE m.UserId = @UserId
) x on r.Id = x.RequisitionID
Через много проб и ошибок я смог чтобы получить данные из EF с помощью этого запроса:
_context.Requisition
.Include("ReqGroups.Group.GroupMemberships")
.ToListAsync();
Но тогда мне нужно отфильтровать связанные данные (GroupMembership), что кажется невозможным в EF Core. Единственная альтернатива, которую я вижу, - это изменить отношения в модели, чтобы я мог фильтровать GroupMembership UserId на основе текущего пользователя и Включить заявку (и).
Заранее спасибо за любые рекомендации.