ado*_*ojp 61 entity-framework eager-loading ef-code-first
想象一下这样的三个实体(客户,书籍,作者):
客户有很多书
一本书有一位作者
我使用该数据打印这样的报告:
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: J. R. R. Tolkien
Run Code Online (Sandbox Code Playgroud)
当我查询客户时,我按预期得到了一堆具有以下性质的查询
我可以通过包含这样的书来减少查询次数:
var customers = db.Customers.Include(c => c.Books);
但我不知道如何加载第三级(作者).我怎样才能做到这一点?
tdy*_*tra 142
此外,没有必要使用字符串重载.这种方法也可以:
var customers = db.Customers.Include(c => c.Books.Select(b => b.Author));
Run Code Online (Sandbox Code Playgroud)
有关更多示例,请参阅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
Mat*_*ton 47
有一个重载Include接受一个字符串,它可以表示你需要的任何额外属性的完整路径:
var customers = db.Customers.Include("Books.Author");
Run Code Online (Sandbox Code Playgroud)
它看起来很奇怪,因为"作者"不是书籍集合上的财产(而是每本书上的财产),但它有效.给它一个旋转.
小智 7
您可以使用ThenInclude关键字:
var customers = db.Customers.Include(c => c.Books).ThenInclude(book => book.Author));}
| 归档时间: |
|
| 查看次数: |
28656 次 |
| 最近记录: |