EF Core 7 中高效地进行批量数据插入
从.NET 7开始,微软在Entity Framework Core 7内置了对高效地批量修改、删除数据的支持,详细请见这个文档 https:// learn.microsoft.com/zh- cn/ef/core/what-is-new/ef-core-7.0/whatsnew?WT.mc_id=DT-MVP-5004444#executeupdate-and-executedelete-bulk-updates
因此我的这个开源项目在.NET 7中将不再提供对批量修改、删除数据的支持。
但是由于Entity Framework Core中仍然没有提供高效地批量插入数据的功能,因此我把这个开源项目升级到.NET 7,从而继续为EF Core提供高效地批量插入数据的功能。
临时加更干货分享
大家能看到这里,已是对我们的支持了。 分享一组9月录制的C#零基础教程。 我们喜欢做这样的分享,它足够的基础,对新手友好。如果需要的话,就来免费领取吧!
资料免费自取:
由于内容过多不便呈现, 需要视频教程和配套源码的小伙伴,点击下方卡片!
也可点击下方卡片: 点击后自动复制威芯号,并跳转到威芯。搜索威芯号添加,内容已做打包, 备注知乎
即可免费领取,注意查收!
为什么开发这个功能?
Entity Framework Core中可以通过AddRange()方法来批量插入数据,但是AddRange()添加的数据仍然是被逐条执行Insert语句来插入到数据库中的,执行效率比较低。
我们知道,我们可以通过SqlBulkCopy来快速地插入大量的数据到SQLServer数据库,因为SqlBulkCopy是把多条数据打成一个数据包发送到SQLServer的,所以插入效率非常高。MySQL、PostgreSQL等也有类似的支持。
当然,直接使用SqlBulkCopy来进行数据插入需要程序员把数据填充到DataTable,而且需要进行列的映射等操作,还需要处理ValueConverter等问题,用起来比较麻烦。
因此我对这些功能封装,从而让EF Core的开发者能够更方便的以面向模型的方式来插入数据。
这个库目前支持MS SQLServer、MySQL、PostgreSQL数据库。
项目用法
这个库的旧版也支持.NET 5、6等版本,具体用法见 https:// github.com/yangzhongke/ Zack.EFCore.Batch ,下面只讲.NET 7中的用法。
首先,安装Nuget包:
SQLServer用户: Install-Package Zack.EFCore.Batch.MSSQL_NET7
MySQL用户: Install-Package Zack.EFCore.Batch.MySQL.Pomelo_NET7
Postgresql 用户: Install-Package Zack.EFCore.Batch.Npgsql_NET7
然后就可以使用这个开源项目为DbContext提供的的扩展方法BulkInsert来进行数据的批量插入了 代码如下:
List<Book> books = new List<Book>();
for (int i = 0; i < 100; i++)