Я пытаюсь создать опцию загрузки данных «AssociateWith» для моего контекста, чтобы отфильтровать строки, к которым у текущего пользователя есть доступ.Моя простая модель данных такова:
Таблицы
UserPermissions
PK: ID
FK: RelatedUserID nullable
FK: RelatedItemID not nullable
Пользователи
PK: ID
Элементы
PK: ID
FK: RelatedCategoryID не обнуляется
Категории PK: ID
В моем тексте данных,Я пытаюсь сделать что-то вроде:
//dbContext is my LINQ context
//current_user_id is the id of my current logged in user
var dlo = new DataLoadOptions();
//issue->UsersPermissions is one->many relationship
// if I omit this LoadWith line, no associatewith filter
// is created in the generated sql code
dlo.LoadWith<Items>(i=>i.UserPermissions);
dlo.AssociateWith<Items>(i=>
i.UserPermissions.Where(p=>
p.RelatedUserID.HasValue && p.RelatedUserID.Value == current_users_id));
dbContext.LoadOptions = dlo;
Мне все кажется разумным, но запрос, сгенерированный в SQL, выглядит так:
SELECT [t0].[ID], [t1].[ID] AS [ID2], [t1].[RelatedUserID], [t1].[RelatedItemID]
(SELECT COUNT(*)
FROM [dbo].[UserPermissions] AS [t2]
WHERE (([t2].[RelatedUserID] = @p0)) AND ([t2].[RelatedItemID] = [t0].[ID])
) AS [value]
FROM [dbo].[Items] AS [t0]
LEFT OUTER JOIN [dbo].[UserPermissions] AS [t1] ON ([t1].[RelatedUserID] = @p0)
AND
([t1].[RelatedItemID] = [t0].[ID])
ORDER BY [t0].[ID], [t1].[ID]
Как я могу форсировать INNER JOINвместо левого внешнего присоединиться?Я неправильно моделирую свои отношения на бэкэнде?
Спасибо за любую помощь.
MMAS