Почему проекция не включает вложенные свойства навигации в EF Core 2.0? - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть эти типы

public class Model
{
    public string Name { get; set; }

    public virtual List<Nested> Nested { get; set; }
}

public class Nested
{
    public Guid ModelId { get; set; }
    public virtual Model Model{ get; set; }

    public Guid FurtherNestedId{ get; set; }
    public virtual FurtherNested FurtherNested { get; set; }
}

public class FurtherNested
{
    public Guid Id {get; set;}
    public string Name{ get; set; }
}

Я пытаюсь использовать их для построения модели представления, как показано ниже:

_dbContext.Models.Include(x => x.Nested).ThenInclude(x => x.FurtherNested).Select(x => new {
    Nested= x.Nested
}).ToList();

По какой-то причине это создает список объектов с вложеннымисвойства (как и ожидалось), но для свойства Nested элемента списка задано значение AdditionalNestedId, но не указано значение AdditionalNested, и поэтому я не могу получить AdditionalNested.Name.IE AdditionalNestedId есть, но фактического свойства навигации нет.

Но у моего контекста данных есть включения ...

Почему это пожалуйста?

РЕДАКТИРОВАТЬ: Также стоит отметитьчто, перемещая toList () выше .Select (), я получаю именно то, что хочу, но для его выполнения требуется в 3 раза больше времени.

РЕДАКТИРОВАТЬ: я пытаюсь получить что-то вроде этого:

{
    any other properties that live on Model,
    Nested: [
         furtherNestedId: '',
         furtherNested: { Name: '' }
    ]
}

1 Ответ

0 голосов
/ 10 декабря 2018

Включить не работает с проекционными запросами.Как только вы начнете проецировать («Выбрать»), вам нужно продолжить с «Выбрать» до конца.

Так попробуйте это:

var myModels = _dbContext.Models.Include(x => x.Nested).ThenInclude(n => n.FurtherNested).Select(x => new
            {
                Name = x.Name,
                Nested = x.Nested.Select(n => new
                {
                    FurtherNestedId = n.FurtherNestedId,
                    FurtherNested = n.FurtherNested
                })

            }).ToList();

Надеюсь, это поможет вам.

...