我有一个对象层次结构,如下所示:
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].Paragraphs
为null
。
检查数据库时,数据看起来是正确的(关联列都已正确填充)。
我也尝试过lamda语法,但是当参数是集合而不是实体时,看不出它是如何工作的,例如人们可以这样做:
.Include(s => s.Paragraphs.Select(p => p.Id == 1)
但是我没有看到如何使用lamda语法指定应加载Paragraphs
中Page
的{{1}}集合。
我是否遗漏了某些内容,或者这是实体框架的限制?如果这是一个限制,我该如何解决它?
答案 0 :(得分:0)
在实际代码中(不是为了询问有针对性的问题而归结的代码,我错过了virtual
关键字.EF没有抱怨无法通过{{加载请求的其他数据1}},它只是默默地忽略了那个请求。
.Include("Pages.Paragraphs")