繁体   English   中英

如何通过实体框架优化插入多条记录(使用存在检查)

[英]How to optimise inserting multiple records (with exists check) via Entity Framework

我有一个文件夹,里面有大约 200 个 csv 文件,每个文件包含大约 6000 行包含共同基金数据的数据。 我必须通过实体框架将这些逗号分隔的数据复制到数据库中。

两个主要对象是Mutual_Fund_Scheme_DetailsMutual_Fund_NAV_Details

  • Mutual_Fund_Scheme_Details - 这包含 Scheme_Name、Scheme_Code、Id、Last_Updated_On 等列。

  • Mutual_Fund_NAV_Details - 这包含 Scheme_Id(外键)、NAV、NAV_Date。

CSV 中的每一行都包含上述所有列,因此在插入之前,我必须 -

  1. 分割每一行。
  2. 先提取scheme相关数据,检查scheme是否存在,获取id。 如果不存在,则插入方案详细信息并获取 ID。
  3. 使用从第 2 步获得的 id,检查是否存在同一日期的 NAV 条目。 如果没有,则插入它,否则跳过它。
  4. 如果在步骤 3 中插入条目,则可能需要使用 NAV 日期更新方案的 Last_Updated_On 日期(取决于它是否比现有值更新)

所有存在检查都是使用 ANY linq 扩展方法完成的,所有新条目都插入到DbContext ,但SaveChanges方法仅在每个文件处理结束时调用。 我曾经在每次插入后调用它,但这只需要比现在更长的时间。

现在,由于这涉及至少两个存在检查,最多两个插入和一个更新,每个文件的插入花费的时间太长,每个文件接近 5-7 分钟。 我正在寻找改进这一点的建议。 任何帮助都会很有用。

具体来说,我希望:

  1. 减少处理每个文件所需的时间
  2. 减少个人存在检查的数量(如果我可以以某种方式将它们加入俱乐部)
  3. 减少个别插入/更新(如果我可以以某种方式将它们加入俱乐部)

使用 EF 将很难对其进行优化。 这是一个建议:

  1. 处理整个文件(~6000)后,使用.Where( x => listOfIdsFromFile.Contains(x.Id))进行存在检查。 这应该适用于 6000 个 id,它将允许您将插入与更新分开。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM