【发布时间】:2020-11-16 11:13:49
【问题描述】:
我的客户正在上传 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 多个规范相混淆。我们有更好的方法来做到这一点吗?就像只将 Id 值插入到 ProductSpec 多对多表中一样?也许使用 SqlBulkCopy 或 AdoNet?
我真的需要好的建议:(
谢谢!
【问题讨论】:
-
嘿,你能分享一下你的数据库类是什么样子的吗?因为对于多对多关系,您通常有三个类。例如 Product、Spec,然后是第三个连接类,如 ProductSpec。
-
就像只将 Id 值插入到 ProductSpec 多对多表中 -- 是的。
-
EF核心包含Bulk插入扩展,您可以尝试使用BulkInsert方法插入数据。更多详细信息,请查看以下链接:Bulk insert、BulkInsert on Nested one-to-many relationship 和 EFCore.BulkExtensions。
-
@ZhiLv-MSFT 不是 EF 核心。您指的是第三方软件。
标签: asp.net-core entity-framework-core many-to-many insert-update