抖音粉丝群1
『7x24小时有问必答』

AI浪潮下的计算机行业——从业者现状与未来展望
前言

因为之前的版本中《EF Core 中高效批删除、更新数据的 Zack.EFCore.Batch 发布三个新特性》,所以我开发了Zack.EFCore.Batch这个开源项目,比较受大家的欢迎,获得了400多个star。
从.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提供高效地批量插入数据的功能。
为什么开发这个功能?
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 books = new List();

for (int i = 0; i < 100; i++)

{

  books.Add(new Book { AuthorName = "abc" + i, Price = new Random().NextDouble(), PubTime = DateTime.Now, Title = Guid.NewGuid().ToString() });

}

using (TestDbContext ctx = new TestDbContext())

{

  ctx.BulkInsert(books);

}

开源项目地址
https://github.com/yangzhongke/Zack.EFCore.Batch
希望这个库能帮到大家。
- EOF -

看完本文有收获?请转发分享给更多人
推荐关注「DotNet」,提升.Net技能 
点赞和在看就是最大的支持❤️

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

Copyright 2010-2015. All rights reserved. 

微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码