0

次のようなオブジェクト階層があります。

public class Book
{
    public virtual List<Page> Pages { get; set; }

    public virtual List<Paragraph> Paragraphs { get; set; }
}

public class Page
{
    public virtual List<Paragraph> Paragraphs { get; set; }
}

完全なオブジェクト階層をロードしたいのですが、次のように進めています。

Book book = (from b in context.Books.Include("Pages").Include("Paragraphs")
    .Include("Pages.Paragraphs") where CONDITION).SingleOrDefault();

それを見つけて積んでいbook.Pagesますが、新品です。book.Paragraphsbook.Pages[i].Paragraphsnull

データベースを調べると、データは正しいように見えます (関連列はすべて正しく入力されています)。

ラムダ構文も試しましたが、パラメーターがエンティティではなくコレクションである場合にどのように機能するかわかりません。たとえば、次のようなことができます。

.Include(s => s.Paragraphs.Select(p => p.Id == 1)

Paragraphsしかし、ラムダ構文を使用して、各入力のコレクションをロードPageするように指定する方法がわかりません。book.Pages

何か不足していますか、それとも Entity Framework の制限ですか? それが制限である場合、どうすれば回避できますか?

4

1 に答える 1

0

実際のコード (ターゲットを絞った質問をする目的で煮詰めたコードではありません) では、virtualキーワードがありませんでした.Include("Pages.Paragraphs")

public class Page
{
    public /* was missing: virtual*/ List<Paragraph> Paragraphs { get; set; }
}
于 2012-05-14T20:12:28.710 に答える