- Main Features
-
Bulk Options
- Bulk Options
- Audit
- Batch
-
Column
- Column Input Expression
- Column Output Expression
- Column InputOutput Expression
- Column PrimaryKey Expression
- Column Synchronize DeleteKey Subset Expression
- Ignore OnInsert Expression
- Ignore OnMergeInsert Expression
- Ignore OnMergeMatched AndCondition Expression
- Ignore OnMergeMatched AndOneNotCondition Expression
- Ignore OnMergeUpdate Expression
- Ignore OnSynchronizeInsert Expression
- Ignore OnSynchronizeMatched AndCondition Expression
- Ignore OnSynchronizeMatched AndOneNotCondition Expression
- Ignore OnSynchronizeUpdate Expression
- Ignore OnUpdate Expression
- Ignore OnUpdateMatched AndCondition Expression
- Ignore OnUpdateMatched AndOneNotCondition Expression
- MergeMatched AndCondition Expression
- MergeMatched AndNotCondition Expression
- SynchronizeMatched AndCondition Expression
- SynchronizeMatched AndOneNotCondition Expression
- UpdateMatched AndCondition Expression
- UpdateMatched AndOneNotCondition Expression
- Coalesce Destination OnMergeUpdate Expression
- Coalesce Destination OnUpdate Expression
- Coalesce OnMergeUpdate Expression
- Coalesce OnUpdate Expression
- Context Factory
- Execute Event
- ExplicitValueResolutionMode
- Identity
- Include Graph
- ForceValueGeneratedStrategy
- Key
- Logging
- Rows Affected
- Temporary Table
- Transaction
- Transient Error
- SQL Server
- Coalesce
- Coalesce Destination
- Delete Matched and Condition
- Delete Matched and one NOT Condition
- Delete Matched and Formula
- Matched and Condition
- Matched and one NOT Condition
- Matched and Formula
- Batch Operations
- Events
- Utilities
- C# Eval Expression
Entity Framework Extensions Update from Query
Definition
UPDATE
all rows from the database using a LINQ Query without loading entities in the context.
An UPDATE
statement is built using the LINQ expression and directly executed in the database.
// UPDATE all customers that are inactive for more than two years var date = DateTime.Now.AddYears(-2); context.Customers .Where(x => x.IsActive && x.LastLogin < date) .UpdateFromQuery(x => new Customer {IsActive = false}); // UPDATE customers by id context.Customers.Where(x => x.ID == userId).UpdateFromQuery(x => new Customer {IsActive = false});
Try it in EF Core | Try it in EF6
Purpose
Updating
entities using SaveChanges
normally requires loading them first in the ChangeTracker
. These additional round-trips are often not necessary.
UpdateFromQuery
gives you access to directly execute an UPDATE
statement in the database and provide a HUGE performance improvement.
Performance Comparisons
Operations | 1,000 Entities | 2,000 Entities | 5,000 Entities |
---|---|---|---|
SaveChanges | 1,000 ms | 2,000 ms | 5,000 ms |
UpdateFromQuery | 1 ms | 1 ms | 1 ms |
## FAQ
Why UpdateFromQuery is faster than SaveChanges, BulkSaveChanges, and BulkUpdate?
UpdateFromQuery
executes a statement directly in SQL such as UPDATE [TableName] SET [SetColumnsAndValues] WHERE [Key]
.
Other operations normally require one or multiple database round-trips which makes the performance slower.
Author: ZZZ Projects