我知道我可以更深入地在Eagle Loading中使用ThenInclude
加载相关数据,如下面的示例
//Eager Loading
var publisher = await _context.Publishers
.Include(pub => pub.Books)
.ThenInclude(book => book.Sales)
.Include(pub => pub.Users)
.Where(pub => pub.PubId == id)
.FirstOrDefaultAsync();
如何在Explicit Loading中编写相同的查询?在以下情况下,如何在不循环书本的情况下加载Sales
的数据?
//Explicit Loading
var publisher = await _context.Publishers
.SingleAsync(pub => pub.PubId == id);
_context.Entry(publisher)
.Collection(pub => pub.Books)
.Load();
_context.Entry(publisher)
.Collection(pub => pub.Users)
.Load();
Query((方法是您的朋友。
它在显式加载文档的查询相关实体小节中有部分解释:
您还可以获得表示导航属性内容的LINQ查询。
这允许您执行一些操作,例如在相关实体上运行聚合运算符,而无需将它们加载到内存中。
示例。。。
您还可以筛选哪些相关实体加载到内存中。
示例。。。
他们忘记提到的是,您也可以将其用于显式加载数据的Include
/ThenInclude
相关数据。
例如
_context.Entry(publisher)
.Collection(pub => pub.Books)
.Query() // <--
.Include(book => book.Sales) // <--
.Load();