Я переношу свой код .NET Framework (EF6) в ядро ASP.NET(EF Core), и я наткнулся на эту проблему. Вот пример кода:
В EF6 я использую Include() и Select() для eager-loading:
return _context.Post
.Include(p => p.PostAuthor.Select(pa => pa.Author).Select(a => a.Interests))
PostAuthor - это таблица переходов, а также есть таблица соединений "AuthorInterest", которую мне не нужно было включать в EF6 (Select идет прямо на a.Interests).
В любом случае, я вижу, что в EF7 это переработано, что означает, что теперь я должен использовать ThenInclude() для вложенных запросов. Однако...
return _context.Post
.Include(p => p.PostAuthor)
.ThenInclude(pa => pa.Select(pa2 => pa2.Author))
...etc
Вышеприведенный код выходит из строя из-за оператора Select(). Документация на https://docs.efproject.net/en/latest/querying/related-data.html, кажется, предполагает, что мне она не нужна, и я могу получить доступ к автору сразу, но я получаю ICollection в последнем лямбда отображается, поэтому мне явно нужен Select(). Я прохожу через несколько таблиц соединений далее в запросе, но для простоты позвольте просто сосредоточиться на первом.
Как мне сделать эту работу?