Странная структура сущностей.Поведение Include()

#c# #.net #entity-framework #orm #entity-framework-6

#c# #.net #entity-framework #orm #entity-framework-6

Вопрос:

Я был удивлен, увидев, что следующий код на самом деле не включает TheLinkedThing :

 await db.Set<TheThing>()
                    .Include(e => e.TheLinkedThing)
                    .SingleOrDefaultAsync(e => e.Id == someId);
 

Я вижу, что в профилировщике SQL join оператор не генерируется. Однако следующий запрос работает так, как ожидалось:

 await db.Set<TheThing>()
                    .Where(e => e.Id == someId)
                    .Include(e => e.TheLinkedThing)
                    .SingleOrDefaultAsync();
 

Почему это происходит? Я не могу найти в документации ничего, что объясняло бы это как ожидаемое поведение. Я использую последнюю версию 6.1.3, отложенная загрузка отключена.

Комментарии:

1. Действительно, странное поведение. Я просто попытался воспроизвести его, но потерпел неудачу. Профилировщик показывает, что создано ВНУТРЕННЕЕ СОЕДИНЕНИЕ.