Вы касаетесь проблемы, которая существует в EF.
Проблема заключается в том, как EF обрабатывает загрузку данных. Он загружает все скалярные свойства объекта, но не навигационные свойства.
Include
влияет на это поведение, сообщая EF также включает указанное навигационное свойство (со всеми его скалярными свойствами)
Но тогда мы доберемся до Select
. Когда вы используете это, вы, по сути, даете фиксированный список столбцов, которые вы хотите получить. Это переопределяет поведение по умолчанию при загрузке всех скалярных свойств, что, к сожалению, также переопределяет добавленные вами операторы Include
.
Самым простым решением является явное указание EF получить подробности:
var d = DataContext.Objects.Include(o => o.Details)
.Select(o => new {
Object = o,
ObjectDetails = o.Details,
OwnerName= o.Owner.Name
});
Кроме того, поскольку Select
явно указывает, какие столбцы EF необходимо извлечь, вам больше не нужен оператор Include
.
Это поведение уже можно увидеть, когда вы извлекаете o.Owner.Name
без фактического вызова Include(o => o.Owner)
.