.NET Framework(EF6)コードをASP.NETコア(EFコア)に転送すると、この問題が発生しました。 Iは、()と選択(使用EF6でEFコアを使用する接合テーブルでThenInclude()を使用する
)熱心なローディングのために:I
return _context.Post
.Include(p => p.PostAuthor.Select(pa => pa.Author).Select(a => a.Interests))
PostAuthorジャンクションテーブルであり、ジャンクションテーブルもある「AuthorInterest」ここでいくつかの例のコードでありますEF6に参加する必要はありませんでした(Selectは直接的に関心があります)。
とにかく、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のドキュメントは、私がそれを必要とせず、Authorにすぐにアクセスできることを示唆しているようですが、最後のラムダでICollectionを取得するので、明らかにSelect()が必要です。クエリ内でさらに複数のジャンクション・テーブルを調べますが、簡単にするために最初のものに焦点を当てましょう。
この作品を作成するにはどうすればよいですか?
ワウ、おかげ:
はEFコアに変換します。非常に不思議なことに、Visual Studioは私にpa.Authorのintellisenseを与えないでしょう(Linqメソッドを示唆しています)。 あなたの投稿の後、私はVSを無視し、すべてをコンパイルした後、魅力的に働いた。 – nikovn
それは変です。私はVS2015 Update 3を使用していて、 'db.Parents.Include(p => p.Children).ThenInclude(c => c.Child).ThenInclude(c => c.Parents)のようなものを書くと、各ラムダで正しいIntellisenseサポートを取得します。 –
VS2015 Ultimate Update 3もこちら。あまりにも驚くことではありません、私はコアプロジェクトに他のバグを持っています - たとえば、intellisenseによって提案された項目を選択すると、ファイルの途中に記号を書き込むときなどです。 多分プラグインです... – nikovn