公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

.NET 開源 EF Core 批處理擴展工具

freeflydom
2024年10月11日 8:50 本文熱度 1212

前言

Entity Framework Core(EF Core)作為 .NET 生態系統中受歡迎的對象關系映射器(ORM),其輕量級、可擴展性和支持多個數據庫引擎而備受青睞。

本文將介紹一款.NET 的開源 EF Core 批處理擴展工具,它極大地提升了數據處理的效率和性能。來看看如何輕松集成到我們現有的 EF Core 項目中。

EFCore.BulkExtensions

Entity Framework Core (EF Core) 批量擴展庫提供了支持批量復制功能的工具,適用于 .NET 平臺上的插入、更新、刪除、讀?。–RUD)、清空表(Truncate)以及保存更改(SaveChanges)等操作。

該庫支持 SQL Server、PostgreSQL、MySQL 和 SQLite 數據庫。

該庫輕量且高效,涵蓋了常用的 CRUD 操作,并被微軟評為推薦的前 20 個 EF Core 擴展之一。

版本說明

內部機制

SQL Server:使用 SqlBulkCopy 進行插入操作,更新和刪除操作則結合了 BulkInsert 和原生 SQL 的 MERGE。

SQLite:由于沒有 BulkCopy,該庫使用純 SQL 結合 UPSERT。

注意事項

批量測試:不能使用 UseInMemoryDb,因為 InMemoryProvider 不支持特定的關系數據庫方法。

如何使用?

首先使用 Nuget 安裝 EFCore.BulkExtensions。

Install-Package EFCore.BulkExtensions  

批量操作示例


context.BulkInsert(entities);                   
context.BulkInsertOrUpdate(entities);           
context.BulkInsertOrUpdateOrDelete(entities);   
context.BulkUpdate(entities);                  
context.BulkDelete(entities);                  
context.BulkRead(entities);                    
context.BulkSaveChanges();    

異步版本


context.BulkInsertAsync(entities);  
context.BulkInsertOrUpdateAsync(entities);    //Upsert  
context.BulkInsertOrUpdateOrDeleteAsync(entiti);//Sync  
context.BulkUpdateAsync(entities);  
context.BulkDeleteAsync(entities);  
context.BulkReadAsync(entities);  
context.BulkSaveChangesAsync();  

與 EF Core 使用


// 刪除  
context.Items.Where(a => a.ItemId >  500).BatchDelete();  
context.Items.Where(a => a.ItemId >  500).BatchDeleteAsync();  
  
// 更新  
context.Items.Where(a => a.ItemId <= 500).BatchUpdate(a => new Item { Quantity = a.Quantity + 100});  
context.Items.Where(a => a.ItemId <= 500).BatchUpdateAsync(a => new Item {Quantity=a.Quantity+100});  
  // can be as value '+100' or as variable '+incrementStep' (int incrementStep = 100;)  
    
// 更新  
context.Items.Where(a => a.ItemId <= 500).BatchUpdate(new Item { Description = "Updated" });  
context.Items.Where(a => a.ItemId <= 500).BatchUpdateAsync(new Item { Description = "Updated" });   
  
// Truncate  
context.Truncate<Entity>();  
context.TruncateAsync<Entity>();  

批量操作

連接字符串配置

如果使用 Windows 身份驗證,則連接字符串中應包含 Trusted_Connection=True,因為 SQL 身份驗證信息需要保留在連接中。

事務管理

每個批量操作默認作為單獨的事務處理,并自動提交。如果需要在一個過程中執行多個操作,則應顯式使用事務。

例如,由于子表不會自動與父表一起插入,因此需要顯式進行第二次調用:


using (var transaction = context.Database.BeginTransaction())
{
    context.BulkInsert(entitiesList);
    context.BulkInsert(subEntitiesList);
    transaction.Commit();
}

批量插入或更新

BulkInsertOrUpdate 方法適用于需要在同一數據庫連接中執行插入或更新操作的場景。當主鍵(Primary Key)匹配時執行更新,否則執行插入。

批量插入、更新或刪除

BulkInsertOrUpdateOrDelete 方法有效地同步表中的行與輸入數據。不在輸入列表中的數據庫記錄將被刪除。

批量讀取

BulkRead 方法基于一個或多個唯一列執行 SELECT 和 JOIN 操作,這些列在配置的 UpdateByProperties 中指定。

示例


using (var transaction = context.Database.BeginTransaction())
{
    // 插入或更新主表
    context.BulkInsertOrUpdate(mainEntitiesList);
    
    // 插入或更新子表
    context.BulkInsertOrUpdate(subEntitiesList);
    
    // 提交事務
    transaction.Commit();
}
// 同步表行與輸入數據
context.BulkInsertOrUpdateOrDelete(allEntitiesList);
// 根據唯一列讀取數據
context.BulkRead(uniqueColumnsConfig);

性能測試結果

以下是在 SQL Server 2019 上進行的性能測試結果(單位:秒):

測試配置

硬件配置:Intel i7-10510U CPU @ 2.30GHz, DDR3 16GB, SSD Samsung 512GB

測試表結構:測試表 TestTable 包含 6 列(Guid, string x2, int, decimal?, DateTime),所有列均被插入,其中 2 列被更新

性能對比

注意事項

小數據集開銷:對于較小的數據集(少于 1000 行),由于大多數批量操作需要創建臨時表并在完成后刪除臨時表,因此會有一定的開銷。

建議:建議對于大于 1000 行的數據集使用批量操作以獲得最佳性能。

項目地址

https://github.com/borisdj/EFCore.BulkExtensions

轉自https://www.cnblogs.com/1312mn/p/18431976


該文章在 2024/10/11 8:53:41 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产成人精品免费视频大全麻 | 国产av无码专区亚洲版 | 精品国产福利第一区二区三区 | 国产成人综合久久精品 | 2025精品国产自在现线 | 国产毛片免费网站大全 | 国产成人高清精品亚洲ap | 国产av大陆精品一区二区三区 | 国产精品毛片99久久久久 | av一区二区三区电影在线播放 | 91麻豆剧传媒国 | 成人欧美一区二区三区黑人 | 国产午夜福利电影一区二区三区 | 成人无码免费午夜福利在线看片 | 国产精品一区二区不卡的视频 | 91在线无码精品秘在线观看 | 18禁黄网站禁片免费观看不卡 | a级毛片视频免费播放 | 国产精品毛片无码 | 国产成人女人在线观看 | 国产综合久久精品推荐 | 91麻豆精品福利在线观看 | 国产爆白浆水真多视频 | 国产精品无码午夜福利 | 国产无码成本人电影 | 精品熟女少妇a∨免费久久1 | 99久久夜色精品国产网站 | av无码乱码麻豆精品国产 | 国产免费无码视频不卡的 | 国产一区在线观看视频网站 | 国产精品一区第二页尤自在拍 | 成人黄色一级电影在线免费观看 | 成人在线免费观看网站 | 亚洲综合色男人的天堂 | 国产欧美成人福利在线播放 | 囯产精品久久久久久久久久无 | 99久久无色码 | www.亚洲综合 | 国产女主播高潮在线喷水 | 国产在线精品一区二区三区直播 | 国产91l在线播放 |