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

因为之前的版本中,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的,所以插入效率非常高。MySQLPostgreSQL等也有类似的支持。

当然,直接使用SqlBulkCopy来进行数据插入需要程序员把数据填充到DataTable,而且需要进行列的映射等操作,还需要处理ValueConverter等问题,用起来比较麻烦。因此我对这些功能封装,从而让EF Core的开发者能够更方便的以面向模型的方式来插入数据。

这个库目前支持MS SQLServerMySQLPostgreSQL数据库。

项目用法

这个库的旧版也支持.NET 56等版本,具体用法见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

希望这个库能帮到大家。

欢迎阅读我编写的《ASP.NET Core技术内幕与项目实战》,这本书的宗旨就是讲微软文档中没有的内容,讲原理、讲实践、讲架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hive学习之路 (一)Hive初识

Hive 简介 什么是Hive 1、Hive 由 Facebook 实现并开源 2、是基于 Hadoop 的一个数据仓库工具 3、可以将结构化的数据映射为一张数据库表 4、并提供 HQL(Hive SQL)查询功能 5、底层数据是存储在 HDFS 上 6、Hive的本质是将 SQL 语句转换为 MapReduce 任务运行 7、使不熟悉 MapR…

angularJs select绑定的model 取不到值

内容结构 一.原因分析 二. 解决办法 一.原因分析 1.由于原型继承的关系&#xff0c;修改父级对象中的someBareValue会同时修改子对象中的值&#xff0c;但反之则不行。2.ng-if 以及 ng-repeat 会创建一个子级作用域&#xff0c;如果在这俩个指令中添加了元素&a…

PS2019摄影后期处理(三)通透....

一、PS可选颜色 在对应颜色进行cmyk加减

(原創) 今天拿到學生證了 (日記)

<原文我在2006/09/07發表在藍色小舖>今天拿到學生證了&#xff0c;終於正式成為台大的學生。第一件事情就是去台大圖書館借了四本書回家看&#xff0c;一次可以借兩個月耶&#xff0c;真不錯。 感覺很複雜&#xff0c;下星期要離開華碩&#xff0c;得繳回識別證&#xff…

os 键盘快捷键截图_如何通过键盘快捷键更有效地使用OS X虚拟桌面

os 键盘快捷键截图() We like having multiple virtual desktops on OS X, especially when we can supercharge them by combining them with a few simple keyboard shortcuts. So, on that note, here are some practical ways to use OS X’s virtual desktops like you me…

旗正规则引擎内存表出错的原因及解决方法

经常我们有一些使用者问到这个问题&#xff0c;关于内存表出错的情况&#xff0c;其实问题不复杂&#xff0c;我这给大家简单的讲一下就明白了&#xff0c;如果还有什么不明白的&#xff0c;其实也都可以问厂家杭州旗正&#xff0c;随时都有人回应的。 1 内存表 1.1 汇总 1.1.1…

Shell脚本之sed的使用

1.sed命令&#xff1b;主要作用是查找&#xff1b;新增 删除 和修改替换。 user.txt daokr#cat user.txt ID Name Sex Age 1 zhang M 19 2 wang G 20 3 cheng M 10 4 huahua M 100 查找命令&#xff1a;-n 和 p&#xff08;prin…

.NET周报【11月第4期 2022-11-30】

国内文章.NET 7 的 AOT 到底能不能扛反编译&#xff1f;https://www.cnblogs.com/huangxincheng/p/16917197.html在 B 站&#xff0c;公众号上发了一篇 AOT 的文章后&#xff0c;没想到反响还是挺大的&#xff0c;都称赞这个东西能抗反编译&#xff0c;可以让破解难度极大提高&…

结合hello world探讨gcc编译程序的过程

本博客&#xff08;http://blog.csdn.net/livelylittlefish&#xff09;贴出作者&#xff08;三二一小鱼&#xff09;相关研究、学习内容所做的笔记&#xff0c;欢迎广大朋友指正&#xff01; 结合"hello world"探讨gcc编译程序的过程 1. gcc简介 gcc/g是GNU工程的C和…

Powershell 时间相关

1.时间相差秒数计算 $start Get-Date Get-HotFix $end Get-Date Write-Host -ForegroundColor Red (Total Runtime: ($end - $start).TotalSeconds)//若开始时间保存为字符串$startTime Get-Date -Format yyyyMMddTHH:mm:ss $startTime[datetime]::ParseExact("$sta…

java类中,成员变量赋值第一个进行,其次是静态构造函数,再次是构造函数

如题是结论&#xff0c;如果有人问你Java类的成员初始化顺序和初始化块知识就这样回答他。下面是代码&#xff1a; package com.test;public class TestClass{// 成员变量赋值第一个执行private static int m11;private int m21;// 静态构造函数第二个执行static{System.out.pr…

Unity的未来,是固守Mono,还是拥抱CoreCLR?

TLDR;Unity坚定的拥抱.NET标准生态&#xff0c;正全速向CoreCLR迁移。Mono vs CoreCLR对于一个C#的初学者&#xff0c;首先要了解的便是.NET和C#的关系。所以这里不再赘述。对于一个Unity的初学者&#xff0c;在使用C#编码的过程中&#xff0c;一定会遇到一些C#新特性不能在项目…

hinton教授的本科生课程CSC321-机器学习中的神经网的笔记

最近一直在看仙守博友所记录的笔记 Hinton的CSC321课程&#xff08;完结&#xff0c;待文字润色&#xff09;&#xff1a; 1、lecture1-NN的简介 2、lecture2-NN结构的主要类型的概述和感知机 3、lecture3-线性神经元和算法 4、lecture4-神经网络在语言上的应用 5、lecture5-对…

ASP存储过程参数数据类型

ASP调用存储过程一般的方法&#xff1a; p.Append cmd.CreateParameter("参数名称",类型,方向,大小) 参许参数值的类型的意义如下&#xff1a; 名称值 整数值 功能 adDBTimeStamp 135 日期时间数据类型 adDecimal 14 十进制整数值 adDouble …

powershell 启动线程与关闭线程

启动线程 $ScreenCapture"C:\ResolutionTool\ScreenCapture.exe" Start-Process $ScreenCapture 关闭线程 Get-Process ScreenCapture| Stop-Process

HDU 5673 Robot 卡特兰数

题目链接&#xff1a; http://acm.hdu.edu.cn/showproblem.php?pid5673 题目描述&#xff1a; 一个人从原点开始向右走&#xff0c; 要求N秒后回到原点&#xff0c; 且过程中不能到负半轴&#xff0c; 人有两种操作&#xff0c; 走动或者停止&#xff0c; 问总共有多少种方案&…

删除本地账户无法登录电脑_如何从Windows的登录屏幕中删除本地用户帐户

删除本地账户无法登录电脑If you have multiple user accounts on your computer, you might find it annoying to have to click on the icon for your username each time you start up the computer. To remedy this problem, you can hide a user account with a registry …

tarjan算法详解

https://blog.csdn.net/jeryjeryjery/article/details/52829142?locationNum4&fps1 以防链接失效&#xff0c;特此转载此博&#xff0c;如有侵权请见谅 在有向图G中&#xff0c;如果两个顶点间至少存在一条路径&#xff0c;称两个顶点强连通(strongly connected)。如果有向…

Gitlab简单使用CI/CD

开篇语大概是去年就想做这个事情了&#xff0c;奈何当时卡到一个docker命令找不到的问题上&#xff0c;导致文章难产了&#xff0c;墨迹了这么久&#xff0c;终于又有空来捣鼓它了。目的我们要实现的目的是我本地不断提交代码(CI),然后服务器不断进行部署(CD)的一个简单流程。准…

AppleScript: Handler

AppleScript绝对是个奇葩的存在&#xff01;不管功能有多强大。 Handler有两种&#xff0c;一种是和OC类似的使用Label参数&#xff0c;一种是和javascript类似的使用括号把一堆参数都放在里面的。 label参数的Handler的写法非常奇怪&#xff0c;光看文档绝对让人迷糊。这里按照…