SkillAgentSearch skills...

EFCore.BulkExtensions

Entity Framework EF Core efcore Bulk Batch Extensions with BulkCopy in .Net for Insert Update Delete Read (CRUD), Truncate and SaveChanges operations on SQL Server, PostgreSQL, MySQL, SQLite, Oracle

Install / Use

/learn @borisdj/EFCore.BulkExtensions

README

EFCore.BulkExtensions

EntityFrameworkCore extensions that offer enterprise-grade performance boost - into overdrive:
-Bulk operations (super fast, en masse DB Protocol): Insert, Update, Delete, Read, Upsert, Sync, SaveChanges.
-Batch ops (chunk-oriented processing): Update, Delete - Deprecated from EF8 (v7+ has native Execute-Up/Del).
-AddOp (additional improvement): Truncate.
Library is Lightweight and very Efficient (warp speed), having all mostly used CRUD operation.
Was selected in top 10 EF Core Extensions recommended by Microsoft.
Latest version is using EF Core 10.
Supports all 5 major sql databases: SQLServer, PostgreSQL, MySQL, Oracle, SQLite.
Check out Testimonials from the Community and User Comments.
With thousands of pleased Users and many satisfied Clients from around the globe.
Customers range from small and medium-sized businesses to large corporations,
of which some are related to big-data/AI industry and fintech companies that have large datasets.
Icon>> and Logo (__):
<img src="/EFCore.BulkExtensions/EFCoreBulk.png" height=60> & <img src="EFCoreBulkLogo_small.png" height=60>
(f.forward | rocket time)

*Also take a look into others highly performant packages:
Open source (MIT or cFOSS) authored .Net libraries and other projects (@Infopedia.io personal blog post).
Opennes (community-driven and verifiable approach) enables security through transparency!
| № | Project | Type | Description | | - | ------------------------ | ---- | -------------------------------------------------------- | | 1
| EFCore.BulkExtensions | .Net_Lib(ngt) cF | EF Core Bulk CRUD Ops (Flagship Library) | | 2 | EFCore.UtilExtensions | .Net_Lib(ngt) MIT | EF Core Custom Annotations and AuditInfo | | 3 | EFCore.FluentApiToAnnotation | .Net_Lib(ngt) MIT | Converting FluentApi configuration to Annotations | | 4 | ExcelIO.FastMapper | .Net_Lib(ngt) MIT | Excel I/O Mapper to-from Poco & .xlsx + attribute | | 5 | FixedWidthParserWriter | .Net_Lib(ngt) MIT | Reading & Writing fixed-width/flat data files | | 6 | CsCodeGenerator | .Net_Lib(ngt) MIT | C# code generation based on Classes and elements | | 7 | CsCodeExample | C# Code ( - ) MIT | Examples of C# code in form of a simple tutorial |

License

BulkExtensions licensed under Dual License (cFOSS: conditionallyFree OSS - OpenSource Sustainability & funding).
If you do not meet criteria for free usage of software with community license then you have to buy commercial one.
When eligible for free usage but still need active support, consider purchasing Starter Lic.

Support

If you find this project useful you can mark it by leaving a Github Star :star:
And even with Community license, if you want help Development, you can make a Donation:
<img src="https://www.buymeacoffee.com/assets/img/custom_images/yellow_img.png" alt="Buy Me A Coffee" height=28> _ or _ Button:zap: (Moneylution)

Contributing

Please read CONTRIBUTING for details on code of conduct, and the process for submitting Pull Requests.
When opening issues do write detailed explanation of the problem or feature with reproducible example.
Want to Contact for Development & Consulting: codis (Quality Delivery).

Description

Supported databases:
-SQLServer (or AzureSQL) under the hood uses SqlBulkCopy for Insert, Update/Delete = BulkInsert + raw Sql MERGE.
-PostgreSQL (9.5+) is using COPY BINARY combined with ON CONFLICT for Update.
-MySQL (8+) is using MySqlBulkCopy combined with ON DUPLICATE for Update.
-Oracle (8+) is using OracleBulkCopy combined with MERGE for Update.
-SQLite has no Copy tool, instead library uses plain SQL combined with UPSERT.
Bulk Tests can not have UseInMemoryDb because InMemoryProvider does not support Relational-specific methods.
Instead Test options are SqlServer(Developer or Express), LocalDb(if alongside Developer v.), or with other adapters.

Installation

Available on NuGet Downloads
Package manager console command to install: Install-Package EFCore.BulkExtensions
Main nuget is for all Databases, and specific ones with single provider for those who need small size packages.
Specific ones have adapter suffix: MainNuget + .SqlServer/PostgreSql/MySql/Oracle/Sqlite ( )
Its assembly is Strong-Named and Signed with a key. | Nuget | Target | Used EF v.| For projects targeting | | ----- | --------------- | --------- | ------------------------------- | | 10.x | Net 10.0 | EF Core 10| Net 10.0+ | | 9.x | Net 9.0 | EF Core 9 | Net 9.0+ | | 8.x | Net 8.0 | EF Core 8 | Net 8.0+ | | 7.x | Net 6.0 | EF Core 7 | Net 7.0+ or 6.0+ | | 6.x | Net 6.0 | EF Core 6 | Net 6.0+ | | 5.x | NetStandard 2.1 | EF Core 5 | Net 5.0+ | | 3.x | NetStandard 2.0 | EF Core 3 | NetCore(3.0+) or NetFrm(4.6.1+) info| | 2.x | NetStandard 2.0 | EF Core 2 | NetCore(2.0+) or NetFrm(4.6.1+) | | 1.x | NetStandard 1.4 | EF Core 1 | NetCore(1.0+) |

Supports follows official .Net lifecycle, currently v.10 as latest(LTS) and v.9.
At the moment ONLY SqlServer and Sqlite are published as 10.0.0.-rc.2 since other providers not yet updated to v10.

Usage

It's pretty simple and straightforward.
Bulk Extensions are made on DbContext and are used with entities List (supported both regular and Async methods):

context.BulkInsert(entities);                 context.BulkInsertAsync(entities);
context.BulkInsertOrUpdate(entities);         context.BulkInsertOrUpdateAsync(entities);    //Upsert
context.BulkInsertOrUpdateOrDelete(entities); context.BulkInsertOrUpdateOrDeleteAsync(entiti);//Sync
context.BulkUpdate(entities);                 context.BulkUpdateAsync(entities);
context.BulkDelete(entities);                 context.BulkDeleteAsync(entities);
context.BulkRead(entities);                   context.BulkReadAsync(entities);
context.BulkSaveChanges();                    context.BulkSaveChangesAsync();

-MySQL when running its Test for the first time execute sql command (local-data): SET GLOBAL local_infile = true;
-SQLite requires package: SQLitePCLRaw.bundle_e_sqlite3 with call to SQLitePCL.Batteries.Init()

Batch Extensions are m

Related Skills

View on GitHub
GitHub Stars4.0k
CategoryData
Updated1d ago
Forks630

Languages

C#

Security Score

85/100

Audited on Mar 27, 2026

No findings