2014-03-28 134 views
0

我有一個22000行的CSV文件。我第一次讀取csv文件中的所有行,並使用實體框架db.SaveChanges()將它們添加到數據庫中,其中保存更改需要45秒。然後下次讀取所有記錄,只添加新記錄並更新現有記錄,這需要2分鐘... 插入批量記錄的最佳方式是什麼?爲什麼它需要這麼長的時間來更新

+1

僅添加新記錄和更新現有記錄時,只需插入22,000行就能完成更多工作。 –

+0

您是否將新行添加到csv文件或從新csv中選擇新行? –

+3

只需將所有行批量插入到sql-server的臨時表中,然後在那裏執行更新,插入和刪除操作。切勿插入/批量將數據直接插入實際表格中。 CSV文件可以包含各種垃圾數據。 –

回答

0

使用EF進行保存時,會發生3次disticnt動作,它們在速度上有很大差異。插入和刪除操作是在一次調用SQL服務器的情況下完成的,但更新一次只能完成一條記錄,因此它可以檢查併發問題並向您報告哪些實體失敗原因。

如果你想堅持使用EF,你應該總是INSERT,然後在服務器上做一個MERGE(SQL命令)。如果你沒有創建存儲過程的能力,你也可以用C#中的sqlcommand來完成MERGE。

最好的選擇和最快的是使用BULK INSERT,如果可以的話。

相關問題