LinqToSql Plus Bulk Synchronize

Description

SYNCHRONIZE all entities from the database.

A synchronize is a mirror operation from the data source to the database. All rows that match the entity key are UPDATED, non-matching rows that exist from the source are INSERTED, non-matching rows that exist in the database are DELETED.

The database table becomes a mirror of the entity list provided.

// Easy to use
ctx.BulkSynchronize(list);

// Easy to customize
context.BulkSynchronize(customers, options => options.ColumnPrimaryKeyExpression = customer => customer.Code);

Purpose

Synchronizing entities with the database is a very rare scenario, but it may happen when two databases need to be synchronized.

BulkSynchronize give you the scalability and flexibility required when if you encounter this situation.

Performance Comparisons

Operations 1,000 Entities 2,000 Entities 5,000 Entities
SubmitChanges 1,000 ms 2,000 ms 5,000 ms
BulkSynchronize 55 ms 65 ms 85 ms
## FAQ

How can I specify more than one option?

You can specify more than one option using anonymous block.

context.BulkSynchronize(list, options => {
	options.BatchSize = 100);
	options.ColumnInputExpression = c => new {c.ID, c.Name, c.Description});
});

How can I specify the Batch Size?

You can specify a custom batch size using the BatchSize option.

Read more: BatchSize

context.BulkSynchronize(list, options => options.BatchSize = 100);

How can I specify custom columns to Synchronize?

You can specify custom columns using the ColumnInputExpression option.

Read more: ColumnInputExpression

context.BulkSynchronize(list, options => options.ColumnInputExpression = c => new {c.Name, c.Description});

How can I specify custom keys to use?

You can specify custom keys using the ColumnPrimaryKeyExpression option.

Read more: ColumnPrimaryKeyExpression

// Single Key
context.BulkSynchronize(customers, options => options.ColumnPrimaryKeyExpression = customer => customer.Code);

// Surrogate Key
context.BulkSynchronize(customers, options => options.ColumnPrimaryKeyExpression = customer => new { customer.Code1, customer.Code2 });



Prime Library