然后在实体框架核心中包含显式加载?

Cur*_*ive 7 .net c# entity-framework entity-framework-core .net-core

我知道我可以更深入地使用ThenIncludeEager Loading加载相关数据,如下例所示

//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();
Run Code Online (Sandbox Code Playgroud)

如何在显式加载中编写相同的查询?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();
Run Code Online (Sandbox Code Playgroud)

Iva*_*oev 14

Query()方法是你的朋友。

它在显式加载文档的查询相关实体小节中进行了部分解释:

您还可以获得表示导航属性内容的 LINQ 查询。

这允许您执行诸如在相关实体上运行聚合运算符之类的操作,而无需将它们加载到内存中。

例子...

您还可以过滤哪些相关实体加载到内存中。

例子...

他们忘记提到的是,您也可以将它用于显式加载数据的Include/ThenInclude相关数据。

例如

_context.Entry(publisher)
    .Collection(pub => pub.Books)
    .Query() // <--
    .Include(book => book.Sales) // <--
    .Load();
Run Code Online (Sandbox Code Playgroud)