实体框架核心3.0包括占用10倍以上的通话时间

rggaifut  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(322)

我在网上浏览了几乎所有的东西,但在合理的时间内都没能正常工作。
实体框架核心3.0 .Include 调用要比单独调用各个表然后在c代码中Map它们多花10倍的时间。
我有两张table product 以及 productimages ,其中productimages是产品内部的集合。
现在当我把电话和 .Include 函数,从数据库中获取记录需要花费很长时间:

products = _context.ProductUploadQueue
               .Include(x => x.ProductUploadQueueImage)
               .Where(x => x.ClientId == clientId && x.PalletId == palletID)
               .ToList();

但是,如果我在单独调用两个表而不链接include调用时执行相同的操作,则会加快一切:

var g = _context.ProductUploadQueue
      .AsNoTracking()
      .Where(x => x.ClientId == clientId && x.PalletId == palletID)
      .ToList(); 

 var hp = g.Select(x => x.Id); 

 var y = _context.ProductUploadQueueImage
      .Where(x => hp.Contains(x.ProductUploadQueueId))  
      .ToList();

我怎样才能加快速度?

waxmsbnn

waxmsbnn1#

我怎样才能加快速度?
你刚刚发现了。回去看看 g 你会发现 productUploadQueueImage 已填充导航属性。运行第二个查询时,change tracker将在加载第二个collecitn时修复所有关系。
在efcore3之前,include查询可以在多个往返中执行,就像您在这里所做的那样。生成包含多个表的单个查询通常要慢得多。

相关问题