У меня есть 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]