EF雖然是一個功能強大的orm工具,但對高性能的批量插入支持卻不咋地,今天就遇到了這個海量數據插入的問題,本來用SqlBulkCopy也能解決,但想找下EF中有沒有較好的實現方法,找了下在stackoverflow上遇到了同樣的問題:c# - Fastest Way of Inserting in Entity Framework。其中得分高,且版本新的是一個名爲的表最高的是一個名爲EFCore.BulkExtensions的庫。
看了下,它是支持Microsoft SQLServer(2012+)或SqlAzure,PostgreSQL(9.5 +)和SQLite這幾個數據庫的。
-
-SQLServer下使用SqlBulkCopy進行插入,對於更新/刪除將BulkInsert與原始Sql MERGE相結合。
-
- PostgreSQL使用COPY BINARY和ON CONFLICT進行更新。
-
-對於 SQLite,使用純 SQL 和 UPSERT。
使用方法也比較簡單:
var bulkConfig = new BulkConfig { SetOutputIdentity = true, BatchSize = 4000 }; context.BulkInsert(entities, bulkConfig); context.BulkInsertOrUpdate(entities, new BulkConfig { SetOutputIdentity = true }); context.BulkInsertOrUpdate(entities, b => b.SetOutputIdentity = true); // e.g. BulkConfig with Action arg.
支持多種靈活的擴展方式,官方也有叫詳細的示例,感興趣的朋友可以試一下。