我如何热切地将Entity Framework Code First中的实体的子孙元素?

设想三个实体(Customer,Book,Author)是这样的:

客户有很多书籍

一本书有一个作者

我使用这些数据来打印这样的报告:

Customer: Peter Book: To Kill a Mockingbird - Author: Harper Lee Book: A Tale of Two Cities - Author: Charles Dickens Customer: Melanie Book: The Hobbit - Author: JRR Tolkien 

当我查询客户时,正如我们所期望的那样,我得到了一系列以下性质的查询

  1. 查询获取客户
  2. 每个客户查询他的书籍的查询
  3. 每本书的查询来获取其作者

我可以通过包含这样的书籍来减less查询次数:

var customers = db.Customers.Include(c => c.Books);

但是我不知道如何加载第三层(作者)。 我怎样才能做到这一点?

Include有一个重载,它接受一个string,可以表示所需的任何额外属性的完整path:

 var customers = db.Customers.Include("Books.Author"); 

这看起来很奇怪,因为“作者”不是一本书的财产(而是每本书的财产),但它是有效的。 给它一个旋风。

另外,没有必要使用string重载。 这个方法也会起作用:

 var customers = db.Customers.Include(c => c.Books.Select(b => b.Author)); 

有关更多示例,请参阅EF团队博客文章: http : //blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-关联entities.aspx

和本教程: http : //www.asp.net/entity-framework/tutorials/reading-related-data-with-the-entity-framework-in-an-asp-net-mvc-application