Entity Framework Delete Without Loading Discover to Batch Delete
How to delete without loading entities in the context?
Deleting entities using SaveChanges requires typically to load them first in the ChangeTracker. These additional round-trips are often not necessary.
StackOverflow Related Questions
Answer
Entity Framework Extensions library adds the DeleteFromQuery extension method. DeleteFromQuery gives you access to directly execute a DELETE
statement in the database and provide a HUGE performance improvement.
- DELETE all rows from the database using a LINQ Query without loading entities in the context.
- A DELETE statement is built using the LINQ expression and directly executed in the database.
// DELETE all customers that are inactive context.Customers.Where(c => !c.IsActive).DeleteFromQuery(); // DELETE customers by id context.Customers.Where(x => x.CustomerID == customerId).DeleteFromQuery();
Performance Comparisons
Operations | 1,000 Entitie | 2,000 Entities | 5,000 Entities |
---|---|---|---|
SaveChange | 1,000 ms | 2,000 ms | 5,000 ms |
DeleteFromQuery | 1 ms | 1 ms | 1 ms |
ZZZ Projects