我如何热切地将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
当我查询客户时,正如我们所期望的那样,我得到了一系列以下性质的查询
- 查询获取客户
- 每个客户查询他的书籍的查询
- 每本书的查询来获取其作者
我可以通过包含这样的书籍来减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