我在网上查看了几乎所有的东西,但无法在合理的时间内让它正常工作。
EntityFrameworkCore3.0 .Include
调用比分别调用各个表并在C#代码中映射它们花费的时间多10倍。
我有两个表product
和productimages
,其中产品产品是产品内部的集合。
现在,当我用.Include
函数链接调用时,从DB中获取记录需要花费很长时间:
products = _context.ProductUploadQueue
.Include(x => x.ProductUploadQueueImage)
.Where(x => x.ClientId == clientId && x.PalletId == palletID)
.ToList();
但是,如果在单独调用两个表而不是链接包含调用时执行相同的操作,则会加速所有操作:
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();
我怎样才能加快速度?
发布于 2020-06-06 20:54:58
我怎样才能加快速度?
你刚刚发现了。回头看看g
,您会发现所有的productUploadQueueImage
导航属性都已被填充。当您运行第二个查询时,Change Tracker将在加载第二个排序规则时修复任何关系。
在EF Core 3之前,包含查询可以在多次往返中执行,就像您在这里所做的一样。生成包含多个表的单个查询通常要慢得多。
https://stackoverflow.com/questions/62237870
复制相似问题