实体框架核心中显式加载的Include



我知道我可以更深入地在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();

最新更新