Dot-Net
在 Entity Framework 4.0 中批處理 DB 命令
我目前的項目需要每天與外部系統同步。同步基於復雜的導入文件結構,該結構使用廣泛的業務邏輯進行解析和處理。由於業務邏輯,我們決定在 .NET 程式碼中進行此操作並重用現有的 BL 組件,而不是在儲存過程或集成服務中編寫相同的邏輯。
BL 層位於 EF 4.0 數據訪問層之上。目前實現處理導入批處理,將所有更改填充到 ObjectContext 並在事務中執行 SaveChanges。當我檢查 SQL 探查器時,我看到 EF 將每個實體更改作為單個 SQL 命令執行(具有自己的到 DB 的往返行程)。此外,看起來這些命令是完全按順序執行的。因此,我有多達 100.000 次往返數據庫以進行初始導入,以及 10.000 - 50.000 次往返數據庫以進行日常同步。
是否可以通過 EF 本身或某些提供程序/擴展以某種方式批量插入/更新/刪除命令?
不,這做不到(是的——我也哭了)。
EF 不支持批處理操作,LINQ-SQL 有(有)同樣的問題。
你有幾個選擇:
- 儲存過程
- 經典 ADO.NET 或 EntitySQL
- 觸發器
我過去選擇了選項 1 和 3。
所有這三種方法的問題是你失去了 EF 抽象、內部圖(樂觀並發),並且你回到了原生 SQL 的世界。
注意這個項目:magiq.codeplex.com
它為 linq-to-sql 帶來了批處理操作,我們現在正在支持 EntityFramework。
乾杯