Entity Framework Extensions Batch SaveChanges
Description
The Entity Framework BatchSaveChanges method is the fastest way to save a few or hundreds of entities.
The same SQL in the same order as SaveChanges is used but batched in fewer commands to increase the performance.
var affectedRows = context.BatchSaveChanges();
Performance Comparison
On average, people report a performance improvement of 500%.
| Operations | 50 Entities | 200 Entities | 500 Entities |
|---|---|---|---|
| SaveChanges | 65 ms | 250 ms | 600 ms |
| BatchSaveChanges | 25 ms | 50 ms | 125 ms |
HINT:A lot of factors might affect the benchmark time such as index, column type, latency, throttling, etc.
What is supported?
- Entity Framework 6
- SQL Server/Azure
Getting Started
Replace SaveChanges
Optimizing your performance is very easy, you simply need to replace SaveChanges by BatchSaveChanges:
// var affectedRows = context.SaveChanges(); var affectedRows = context.BatchSaveChanges();
Override SaveChanges
Or you can also override the SaveChanges method to call BatchSaveChanges method instead:
public class EntityContext : DbContext { // ...code... public override int SaveChanges() { return this.BatchSaveChanges(); } }
FAQ
Why BatchSaveChanges is faster than SaveChanges?
The SaveChanges method makes 1 database round-trip for every 1 entity to save.
The BatchSaveChanges method makes 1 database round-trip for every 25 entities to save (Default Value).
So, if you need to save 100 entities:
- The
SaveChangesmethod will execute 100 SQL commands. - The
BatchSaveChangesmethod will execute 4 SQL commands.
The same SQL in the same order as SaveChanges is used but batched in fewer commands to increase the performance.
Is BatchSaveChanges as fast as SaveChanges with one entity?
Under the hood, BatchSaveChanges uses SaveChanges to save 1 entity (so, as fast!), but will outperform it by batching commands in all other cases.
We always recommend to use BatchSaveChanges.
What is the difference between BatchSaveChanges and BulkSaveChanges?
For a few hundreds of entities or less, the BatchSaveChanges offers better performance than BulkSaveChanges.
However, the BulkSaveChanges is a more scalable method. So, it becomes faster than BatchSaveChanges when you start to save thousands of entities.
Documentation
BatchSaveChanges
Methods
| Name | Description | Example |
|---|---|---|
BatchSaveChanges() |
Saves all changes made in this context to the underlying database by combining SQL commands generated. | Try it |
BatchSaveChangesAsync() |
Saves all changes asynchronously made in this context to the underlying database by combining SQL commands generated. | Try it |
BatchSaveChangesAsync(cancellationToken) |
Saves all changes asynchronously made in this context to the underlying database by combining SQL commands generated. | Try it |
ZZZ Projects