Entity Framework и принудительное внутреннее соединение

У меня есть Table1 со следующими отношениями (они не применяются, они только создают отношения для свойств навигации )

Table1 (*)->(1) Table2
Table1 (*)->(1) Table3
Table1 (*)->(1) Table4
Table1 (*)->(1) Table5

Использование кода активной загрузки выглядит так:

IQueryable<Table1> query = context.Table1s;

query = query.Include(Table1 => Table1.Table2);
query = query.Include(Table1 => Table1.Table3);
query = query.Include(Table1 => Table1.Table4);
query = query.Include(Table1 => Table1.Table5);

query = query.Where(row => row.Table1Id == table1Id);

query.Single();

Каждый раз, когда я пытаюсь организовать операторы Include (), первая включенная таблица имеет внутреннее соединение в сгенерированном TSQL, а остальные - левое внешнее соединение (я ожидаю, что левое внешнее соединение для все они). Я не занимаюсь разделением сущностей, это просто простые таблицы с FK.

Если DefaultIfEmpty () - единственное решение, может ли кто-нибудь объяснить причину, почему, когда все, кроме первой включенной таблицы, предоставляют ожидаемый SQL?

Насколько я понимаю, поведение по умолчанию для свойства навигации - ВЛЕВО ВНЕШНИЙ, но я не могу получить ВСЕ свойства для создания значения по умолчанию.

Любая помощь будет ОЧЕНЬ признательна.

Заранее благодарю!

----- Создан TSQL (изменен для краткости, но структура такая же) -------

(@p__linq__0 int)SELECT 
[Limit1].[Table1Id] AS [Table1Id], 
[Limit1].[OtherData] AS [OtherData]
FROM ( SELECT TOP (2) 
    [Extent1].[Table1Id] AS [Table1Id], 
    [Extent1].[OtherData] As [OtherData]
    FROM       [dbo].[Table1] AS [Extent1]
    INNER JOIN [dbo].[Table2] AS [Extent2] ON [Extent1].[Table2Id] = [Extent2].[Table2Id]
    LEFT OUTER JOIN [dbo].[Table3] AS [Extent3] ON [Extent1].[Table3Id] = [Extent3].[Table3Id]
    LEFT OUTER JOIN [dbo].[Table4] AS [Extent4] ON [Extent1].[Table4Id] = [Extent4].[Table4Id]
    LEFT OUTER JOIN [dbo].[Table5] AS [Extent5] ON [Extent1].[Table5Id] = [Extent5].[Table5Id]
    WHERE [Extent1].[Table1Id] = @p__linq__0
)  AS [Limit1]
11
задан Jamie Altizer 3 October 2011 в 19:09
поделиться