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.pswp.cn/news/280720.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280720.shtml
英文地址,請注明出處:http://en.pswp.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;光看文檔絕對讓人迷糊。這里按照…