У меня есть таблица1 со следующими отношениями (они не применяются, они только создают отношения для свойств навигации)
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(), включает в себя первую таблицу Inner Join в ее сгенерированном TSQL, а остальные - Left Outer Join (я ожидаю, что Left Outer для всех). Я не разделяю Entity Split, они просто обычные таблицы с FK.
Если DefaultIfEmpty() является единственным решением, может ли кто-нибудь объяснить причину, почему, когда все, кроме первой таблицы, обеспечивают ожидаемый SQL?
Я понимаю, что поведение по умолчанию для свойства Navigation - LEFT OUTER, но я не могу получить ВСЕ свойства для создания значения по умолчанию.
Любая помощь была бы очень оценена.
Заранее благодарю вас!
----- Созданный 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]