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、 由于“单次查询”将返回更多数据(重复数据),而多个查询将返回更少的数据,但往返次数更多,因此很难“选择”这些策略中的一个作为解决所有问题的解决方案。