有没有更好的方式.Core 3.1多对多插入



我的客户正在上传用于产品更新的excel文件。每个excel文件都有50k多行,其中包含ProductId和多个SpecId。

每一排我都喜欢;

Product p = _context.Products.include(i => i.Specs).FirstOrDefault(x => x.Id == ExcelProductId);
Spec s = _context.Specs.FirstOrDefault(x => x.Id == ExcelSpecId);
p.Specs.Add(s);
_context.SaveChanges();

这导致了一些性能问题,代码在25种以上的规格下真的很混乱。我们有更好的方法吗?比如在ProductSpec多对多表中只插入Id值?也许使用SqlBulkCopy或AdoNet?

我真的需要好的建议:(

谢谢!

您可以

  1. 应用批处理,一次发送零件(例如,读取1000行、插入、读取、再发送1000行等(。这样做是为了不阻塞主ui线程(如果这是一个gui应用程序(
  2. 使用大容量插入还有一种大容量插入xml文件的方法。如果文件与表的结构不完全匹配,可以尝试首先将所有内容插入到临时表中,然后运行sql查询来复制数据。似乎还有裸体包
  3. 创建为此任务优化的自定义sql查询。您可以使用Sql探查器来深入了解EF生成的查询,并且应该有很多关于如何在线编写高效Sql查询的资源

最新更新