我在网上浏览了几乎所有的东西,但在合理的时间内都没能正常工作。
实体框架核心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();
我怎样才能加快速度?
1条答案
按热度按时间waxmsbnn1#
我怎样才能加快速度?
你刚刚发现了。回去看看
g
你会发现productUploadQueueImage
已填充导航属性。运行第二个查询时,change tracker将在加载第二个collecitn时修复所有关系。在efcore3之前,include查询可以在多个往返中执行,就像您在这里所做的那样。生成包含多个表的单个查询通常要慢得多。