簡體   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