Entity Framework Extensions Coalesce Destination
Description
The CoalesceDestination
option lets you update the destination value if the value is null in the database. This option is the equivalent of doing an ISNULL(DestinationTable.ColumnName, StagingTable.ColumnName)
in SQL Server.
Example
context.BulkMerge(customers, options => { // ON UPDATE, modify the "Name" and "Email" column value only if the destination value is not null options.CoalesceDestinationOnMergeUpdateExpression = x => new { x.Name, x.Email }; });
Scenario
A company uses Entity Framework and imports customers with the BulkMerge
method to insert new customers and update existing customers.
However, there is a peculiarity. Only null values for customer columns need to be updated; otherwise, we keep the current database values.
In summary:
- When the destination
Email IS NULL
, the destination value is updated - When the destination
Email IS NOT NULL
, the destination value is kept
Solution
The CoalesceDestination
option has 3 solutions to this problem:
- On[Action]UseCoalesceDestination
- CoalesceDestinationOn[Action]Expression
- CoalesceDestinationOn[Action]Names
On[Action]UseCoalesceDestination
Use this option if you want all properties to use this feature by default.
context.BulkMerge(customers, options => { // ON UPDATE, modify a column value only if the destination value is not null options.OnMergeUpdateUseCoalesceDestination = true; });
Method | Name | Try it |
---|---|---|
BulkMerge | OnMergeUpdateUseCoalesceDestination | Fiddle |
BulkUpdate | OnUpdateUseCoalesceDestination | Fiddle |
BulkSynchronize | OnSynchronizeUpdateUseCoalesceDestination | Fiddle |
CoalesceDestinationOn[Action]Expression
Use this option if you prefer to specify with an expression which properties you want to include.
context.BulkMerge(customers, options => { // ON UPDATE, modify the "Name" and "Email" column value only if the destination value is not null options.CoalesceDestinationOnMergeUpdateExpression = x => new { x.Name, x.Email }; });
Method | Name | Try it |
---|---|---|
BulkMerge | CoalesceDestinationOnMergeUpdateExpression | Fiddle |
BulkUpdate | CoalesceDestinationOnUpdateExpression | Fiddle |
BulkSynchronize | CoalesceDestinationOnSynchronizeUpdateExpression | Fiddle |
CoalesceDestinationOn[Action]Names
Use this option if you prefer to specify a list of property names you want to include. The value must correspond to the property name or the navigation name.
context.BulkMerge(customers, options => { // ON UPDATE, modify the "Name" and "Email" column value only if the destination value is not null options.CoalesceDestinationOnMergeUpdateNames = new List<string>() { nameof(Customer.Name), nameof(Customer.Email) }; });
Method | Name | Try it |
---|---|---|
BulkMerge | CoalesceDestinationOnMergeUpdateNames | Fiddle |
BulkUpdate | CoalesceDestinationOnUpdateNames | Fiddle |
BulkSynchronize | CoalesceDestinationOnSynchronizeUpdateNames | Fiddle |
Related Solutions
ZZZ Projects