1

次のクエリを実行すると、テーブルの読み込みに失敗します。

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 つの注意事項があります。

これが機能するには、最終的な選択はエンティティでなければなりません。つまり、新しいものを選択するのではなく、投稿を選択してください {…}

これは明らかに上記のコード ブロックの問題です。熱心な読み込みを中断しない、この問題に対する既知の回避策は他にありますか?

4

1 に答える 1

2

私はこれを解決したと思いますが、この特定のインスタンスでのみ機能する可能性があります。結合後にインクルードを移動すると、クエリが機能するように見えます:

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});

編集:これに似た別のクエリには、外部結合も必要です。これは、この例とは異なり、何を何に結合するかが重要になるため、いくつかの問題を引き起こしますが、それでも実行可能です。

于 2009-09-17T19:38:45.003 に答える