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.Paragraphs加载,但.book.Pages[i].Paragraphsnull

检查数据库,数据看起来正确(关联列都正确填充)。

我也尝试了 lamda 语法,但看不到当参数是集合而不是实体时它是如何工作的,例如可以执行以下操作:

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

但我看不出如何使用 lamda 语法来指定应该加载Paragraphs每个Pagein的集合。book.Pages

我是否遗漏了什么,或者这是实体框架的限制?如果这是一个限制,我该如何解决它?

4

1 回答 1

0

在实际代码中(不是为了提出有针对性的问题而简化的代码,我错过了一个virtual关键字。EF 并没有抱怨无法加载通过 请求的附加数据.Include("Pages.Paragraphs"),它只是默默地忽略了该请求。

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