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.
支持多种灵活的扩展方式,官方也有叫详细的示例,感兴趣的朋友可以试一下。