Entity Framework Core 7中高效地进行批量数据插入

1064 篇文章 49 订阅
618 篇文章 16 订阅

因为之前的版本中,EF Core无法实现高效地批量插入、修改、删除数据,所以我开发了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<Book> books = new List<Book>();
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

希望这个库能帮到大家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值