Entity framework core 实体框架核心2.2嵌套选择生成多个查询

Entity framework core 实体框架核心2.2嵌套选择生成多个查询,entity-framework-core,ef-core-2.2,Entity Framework Core,Ef Core 2.2,我有一个类似的问题: var customers = dbContext.Customers.Select(c => new { FirstName = c.FirstName, LoanStatuses = c.LoanRequests.Select(l => l.Status) }).ToList(); 执行ToList()时,属性l

我有一个类似的问题:

var customers = dbContext.Customers.Select(c => new 
                {
                    FirstName = c.FirstName,
                    LoanStatuses = c.LoanRequests.Select(l => l.Status)
                }).ToList();
执行ToList()时,属性loanstates不会具体化,就像在EntityFramework中一样,而是在调用customer.loanstates时发送新查询

我还尝试在.Select方法中添加ToList(),正如各种博客上所建议的那样。这很好,但是,发送了2个查询而不是一个查询(实际上,因为我有8个类似于此的集合属性,所以我得到了9个查询而不是一个查询)

有没有办法强迫EF Core 2.2执行一次查询,并使用所有必需的联接,以便在一次命中中返回所有必需的数据,就像在Entity Framework的非核心版本中一样

有没有办法强迫EF Core 2.2执行一次查询,并使用所有必需的联接,以便在一次命中中返回所有必需的数据,就像在Entity Framework的非核心版本中一样

否。已启用单一查询模式

在EF Core 2.x中,您应该在集合预测中使用前面提到的
ToList
来获得
K+1
查询,其中
K
是相关集合的数目。这样至少可以避免
N*K+1
查询(最差),其中
N
是主查询返回的记录数

但请注意,对于许多子集合来说,这实际上比单个查询要好,而EF Core 3.x也受到了这一点的影响,尤其是在包含多个集合的情况下

这就是为什么EFCore5.0将引入EFC2.x“多查询”模式的原因


总而言之,
K+1
查询模式是EFC 2.x中最好的模式,如果您有很多子集合,最好不要升级到EFC 3.x,而是等待EFC 5.x并保持该模式。

谢谢您的回答。我怀疑可能是这样。除非我找到解决方法,否则这将被标记为答案。可能没有silver bullet、 由于“单次查询”将返回更多数据(重复数据),而多个查询将返回更少的数据,但往返次数更多,因此很难“选择”这些策略中的一个作为解决所有问题的解决方案。