Entity Frameworkでの積極的な読み込みが複雑なクエリで失敗する
-
10-07-2019 - |
質問
次のクエリは、実行時にテーブルのロードに失敗します。
IEnumerable<Bookmark> tempBookmarks = ListBookmarksByUserID(userID);
IEnumerable<CandidateWithBookmarks> results = (from c in _internshipEntities.CandidateSet
.Include("education")
.Include("progress")
.Include("contacts")
.Include("availability")
.Include("hosttypes")
.Include("hostsizes")
.Include("hostcapacities")
.Include("hoststates")
.Include("users")
join b in tempBookmarks on c.ID equals b.candidates.ID
select new CandidateWithBookmarks()
{CandidateObject = c, BookmarkObject = b});
return results;
問題に関連する記事、つまり Alex Jamesの記事「インクルードを実際にインクルードする方法」。ソリューションには1つの警告があります:
これを機能させるには、最終選択がエンティティである必要があります。つまり、新しい{…}を選択するのではなく、投稿を選択します。
明らかに、上記のコードブロックの問題です。積極的な読み込みを中断させない、この問題の他の既知の回避策はありますか?
解決
これを解決したと思いますが、この特定のインスタンスでのみ機能する可能性があります。結合後にインクルードを移動することで、クエリは機能しているように見えます:
IEnumerable<CandidateWithBookmarks> results = (
from b in tempBookmarks
join c in _internshipEntities.CandidateSet
.Include("education")
.Include("progress")
.Include("contacts")
.Include("availability")
.Include("hosttypes")
.Include("hostsizes")
.Include("hostcapacities")
.Include("hoststates")
.Include("users")
on b.candidates.ID equals c.ID
select new CandidateWithBookmarks(){CandidateObject = c, BookmarkObject = b});
編集:これに似た別のクエリには外部結合も必要です。この例とは異なり、何に何を結合するかが問題になるため、いくつかの問題が発生しますが、それでも実行可能です。
所属していません StackOverflow