首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过实体框架优化插入多个记录(使用存在检查)

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

Stack Overflow用户
提问于 2021-05-02 12:02:21
回答 1查看 230关注 0票数 0

我有一个文件夹,里面装满了大约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中的每一行都包含上述所有列,所以在插入之前,我必须-

line.

  • Extract首先对方案相关的数据进行
  1. 拆分,然后检查方案是否存在并获得id。如果不存在,则插入方案详细信息并使用从步骤2获得的id获取id.
  2. ,请检查是否存在相同日期的NAV条目。如果没有,则插入它,否则跳过它。如果在步骤3中插入了一个条目,则可能需要用NAV日期(取决于它比现有值更新)更新该方案的

日期。

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

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

具体来说,我希望:

减少处理每个file

  • Decrease所需的时间--存在的个体数--检查(如果我可以在某些way)

  • Decrease单独插入/更新(如果我可以以某种方式标记它们)
EN

回答 1

Stack Overflow用户

发布于 2021-05-02 12:37:08

很难用EF来优化它。以下是一个建议:

  1. 在处理整个文件(~6000)后,使用.Where( x => listOfIdsFromFile.Contains(x.Id))进行存在检查。这应该适用于6000个it,它将允许您将插入与更新分开。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67356147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档