多个请求,而不是EF核心



我有此选择,我希望通过将一个命令发送到SQL Server执行,但我可以看到10s请求。我该如何修复?

我们有拥有客户和订单的公司。由于某些原因,订单属于公司实体。

var q = _dbContext.Companies
        .Include(x => x.Customers)
        .Include(c => c.Orders)
        .Where(a => a.CompanyId == 123);
 var total = await q.CountAsync();
 q = q.OrderByDescending(x => x.CompanyCode)
     .Skip((pageIndex - 1) * pageSize).Take(pageSize);
 var res = await q.Select(x => new ResultDto()
 {
     CompanyCode = x.CompanyCode,     
     Customers = x.Customers
         .Where(c => c.IsActive)
         .Select(c => new CustomerDto()
         {
             FirstName = c.FirstName,
             Surname = c.Surname,             
             Orders = x.Orders
                 .Where(o => o.IsOpen)
                 .Select(o => new OrderDto()
                 {
                     DateCreated = o.DateCreated
                 }).ToList()
         }).FirstOrDefault(),
 }).ToListAsync();

这是ef.netcore优化。实际上,当导航属性是集合时,您实际上无法获得一个查询。我现在找不到任何链接,但这是设计。

在选择或内部内部的导航中有一个集合后,它将为每个根实体产生单独的查询。我认为原因是该查询产生的冗余数据量。

我建议您像没有很多数据一样留下它;结果中有1000行。您会看到很多查询,但它们会非常快。

我可以看到您在这里有分页,所以这应该不是问题。

否则,分别选择您的收藏品,并仔细地加入记忆中。

不幸的是,EF Core

没有其他方法

另外,我建议将EF核心日志打开,以提早发生。我敢打赌,FirstOdfault会产生一些警告。

相关内容

  • 没有找到相关文章

最新更新