Я переношу свой код .NET Framework (EF6) в ядро ASP.NET (EF Core), и я наткнулся на эту проблему. Вот несколько примеров коды:Использование EF Core ThenInclude() на таблицах соединений
В EF6 я использую Включить() и Select() для нетерпеливой-загрузки:
return _context.Post
.Include(p => p.PostAuthor.Select(pa => pa.Author).Select(a => a.Interests))
PostAuthor представляет собой таблицу стыка, и есть таблица Junction «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(). Я прохожу через несколько таблиц соединений далее в запросе, но для простоты, давайте просто сосредоточимся на первом.
Как это сделать?
Вау, спасибо. Очень странно - Visual studio не даст мне intellisense для pa.Author (вместо этого предлагает некоторые методы Linq) и будет подчеркивать все с красным, как только я попытаюсь написать его. После вашего поста я проигнорировал VS и после компиляции все работало как шарм. – nikovn
Это странно. Я использую VS2015 Update 3, и когда я пишу что-то вроде 'db.Parents.Include (p => p.Children) .ThenInclude (c => c.Child) .ThenInclude (c => c.Parents)' I получите правильную поддержку Intellisense на каждой лямбда. –
VS2015 Ultimate Update 3 здесь тоже. Не слишком удивлен, у меня есть другие ошибки в основных проектах - например, когда я выбираю элемент, предложенный intellisense, он записывает символы в середине файла и т. Д. Возможно, это плагины ... – nikovn