在实体框架查询中包含层次结构

时间:2012-05-13 04:14:03

标签: entity-framework ef-code-first

我有一个对象层次结构,如下所示:

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

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

我也尝试过lamda语法,但是当参数是集合而不是实体时,看不出它是如何工作的,例如人们可以这样做:

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

但是我没有看到如何使用lamda语法指定应加载ParagraphsPage的{​​{1}}集合。

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

1 个答案:

答案 0 :(得分:0)

在实际代码中(不是为了询问有针对性的问题而归结的代码,我错过了virtual关键字.EF没有抱怨无法通过{{加载请求的其他数据1}},它只是默默地忽略了那个请求。

.Include("Pages.Paragraphs")