1

私はこのようなものを持っています:

var threads = _forumsDb.ForumsAccounts
.Where(a => a.UserName == User.Identity.Name)
.SelectMany(u => u.Threads);

しかし、これらのスレッド エンティティには関連する posts エンティティがあり、遅延読み込みのために読み込まれません。私がこのようなことをした場合:

var threads = _forumsDb.ForumsAccounts
.Include("Posts")
.Where(a => a.UserName == User.Identity.Name)
.SelectMany(u => u.Threads);

どうやら機能していないようで、これらのスレッド エンティティにはまだ null の Posts エンティティがあります。どうすれば正しくできますか?

4

1 に答える 1

1

投影図(または)Includeでのプロパティの申請はできません。投稿を追加のプロパティとして含めるには、プロジェクションを拡張する必要があります。SelectSelectMany

var threads = _forumsDb.ForumsAccounts
    .Where(a => a.UserName == User.Identity.Name)
    .SelectMany(u => new
    {
        Threads = u.Threads,
        ThreadPosts = u.Threads.Select(t => t.Posts)
    })
    .AsEnumerable()
    .SelectMany(a => a.Threads)
    .ToList();

Threadとの関係が 1 対多の場合、 EF はスレッドPostのコレクションを埋めます。Posts

ただし、エンティティに逆ForumAccountのプロパティがある場合、クエリははるかに簡単になります。Thread

var threads = _forumsDb.Threads
    .Include("Posts")
    .Where(t => t.ForumAccount.UserName == User.Identity.Name)
    .ToList();

この場合、eager loading でInclude動作します。

于 2012-09-01T17:51:25.813 に答える