| uid | Merge-API-Migration |
|---|
This page contains information how to replace old Merge API calls with new API calls.
Old API consider empty source list as noop operation and returns 0 without request to database. New version allways send command to database because:
- it will help to find errors in your command
- it will fix
by sourceoperations for SQL Server, which make sense for empty source
Exception: Oracle, Sybase and SAP HANA implementations still use noop approach due to too aggressive type checking.
Old API has 4x2 Merge methods. One method accepts target table as first parameter, another - DataConnection instance. New API works only with tables as target so you will need to get table from data connection using following code:
dataConnection.GetTable<TTable>()If you used tableName, databaseName or schemaName parameters, replace them with follwing calls on table:
db.GetTable<T>()
.TableName(tableName)
.DatabaseName(databaseName)
.SchemaName(schemaName);Parameters tableName, databaseName and schemaName omitted.
// Old API
int Merge<T>(this DataConnection dataConnection, IQueryable<T> source, Expression<Func<T,bool>> predicate);
int Merge<T>(this ITable<T> table, IQueryable<T> source, Expression<Func<T,bool>> predicate);
// New API
// You can (and should) remove .AsEnumerable() - it was added to copy old behavior
db.GetTable<T>()
.Merge()
.Using(source.Where(predicate).AsEnumerable())
.OnTargetKey()
.UpdateWhenMatched()
.InsertWhenNotMatched()
.DeleteWhenNotMatchedBySourceAnd(predicate)
.Merge();Parameters tableName, databaseName and schemaName omitted.
// Old API
int Merge<T>(this DataConnection dataConnection, Expression<Func<T,bool>> predicate, IEnumerable<T> source)
int Merge<T>(this ITable<T> table, Expression<Func<T,bool>> predicate, IEnumerable<T> source);
// New API
db.GetTable<T>()
.Merge()
.Using(source)
.OnTargetKey()
.UpdateWhenMatched()
.InsertWhenNotMatched()
.DeleteWhenNotMatchedBySourceAnd(predicate)
.Merge();Parameters tableName, databaseName and schemaName omitted.
// Old API
int Merge<T>(this DataConnection dataConnection, bool delete, IEnumerable<T> source);
int Merge<T>(this ITable<T> table, bool delete, IEnumerable<T> source);
// New API
// (delete = true)
db.GetTable<T>()
.Merge()
.Using(source)
.OnTargetKey()
.UpdateWhenMatched()
.InsertWhenNotMatched()
.DeleteWhenNotMatchedBySource()
.Merge();
// (delete = false)
db.GetTable<T>()
.Merge()
.Using(source)
.OnTargetKey()
.UpdateWhenMatched()
.InsertWhenNotMatched()
.Merge();Parameters tableName, databaseName and schemaName omitted.
// Old API
int Merge<T>(this DataConnection dataConnection, IEnumerable<T> source);
int Merge<T>(this ITable<T> table, IEnumerable<T> source);
// New API
db.GetTable<T>()
.Merge()
.Using(source)
.OnTargetKey()
.UpdateWhenMatched()
.InsertWhenNotMatched()
.Merge();