Synchronization code

This commit is contained in:
sunkaixuan 2023-10-20 21:36:32 +08:00
parent 9e36607966
commit 3351695e58
6 changed files with 10 additions and 10 deletions

View File

@ -48,12 +48,12 @@ namespace SqlSugar
dt.TableName = "#temp";
}
public async virtual Task<int> Merge<T>(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns, List<T> datas) where T : class, new()
public async virtual Task<int> Merge<T>(string tableName,DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns, List<T> datas) where T : class, new()
{
var result = 0;
await this.Context.Utilities.PageEachAsync(datas,2000,async pageItems =>
{
var x = await this.Context.Storageable(pageItems).WhereColumns(whereColumns).ToStorageAsync();
var x = await this.Context.Storageable(pageItems).As(tableName).WhereColumns(whereColumns).ToStorageAsync();
result += await x.BulkCopyAsync();
result += await x.BulkUpdateAsync(updateColumns);
return result;

View File

@ -222,7 +222,7 @@ namespace SqlSugar
await buider.CreateTempAsync<T>(dt);
await buider.ExecuteBulkCopyAsync(dt);
}
var result = await buider.Merge(dt, this.entityInfo,whereColumns,updateColumns, datas);
var result = await buider.Merge(GetTableName(),dt, this.entityInfo,whereColumns,updateColumns, datas);
//var queryTemp = this.context.Queryable<T>().AS(dt.TableName).ToList();//test
//var result = await buider.UpdateByTempAsync(GetTableName(), dt.TableName, updateColumns, whereColumns);
if (buider?.DbFastestProperties?.IsMerge == true&&this.context.CurrentConnectionConfig.DbType != DbType.Sqlite)

View File

@ -18,6 +18,6 @@ namespace SqlSugar
Task<int> ExecuteBulkCopyAsync(DataTable dt);
Task CreateTempAsync<T>(DataTable dt) where T : class, new();
void CloseDb();
Task<int> Merge<T>(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns,List<T> datas) where T : class, new();
Task<int> Merge<T>(string tableName,DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns,List<T> datas) where T : class, new();
}
}

View File

@ -71,7 +71,7 @@ namespace SqlSugar
}
public override Task<int> Merge<T>(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns,List<T> datas) where T : class
public override Task<int> Merge<T>(string tableName, DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns,List<T> datas) where T : class
{
Check.Exception(this.entityInfo.Columns.Any(it => it.OracleSequenceName.HasValue()), "The BulkMerge method cannot be used for sequence", "BulkMerge方法不能用序列");
var sqlBuilder = this.Context.Queryable<object>().SqlBuilder;
@ -86,7 +86,7 @@ namespace SqlSugar
var updateColumnsSql = string.Join(" , ", updateColumns.Select(it => $"tgt.{sqlBuilder.GetTranslationColumnName(it)}=src.{sqlBuilder.GetTranslationColumnName(it)}"));
var insertColumnsSqlTgt =string.Join(" , ", insertColumns.Select(it=>"tgt."+ sqlBuilder.GetTranslationColumnName(it.DbColumnName)));
var insertColumnsSqlsrc = string.Join(" , ", insertColumns.Select(it => "src." + sqlBuilder.GetTranslationColumnName(it.DbColumnName)));
var sql = $@"MERGE INTO {sqlBuilder.GetTranslationColumnName(entityInfo.DbTableName)} tgt
var sql = $@"MERGE INTO {sqlBuilder.GetTranslationColumnName(tableName)} tgt
USING {sqlBuilder.GetTranslationColumnName(dt.TableName)} src
ON ({whereSql})
WHEN MATCHED THEN

View File

@ -67,7 +67,7 @@ namespace SqlSugar
copy.BulkCopyTimeout = this.Context.Ado.CommandTimeOut;
return copy;
}
public override Task<int> Merge<T>(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns, List<T> datas)
public override Task<int> Merge<T>(string tableName,DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns, List<T> datas)
{
var sqlBuilder = this.Context.Queryable<object>().SqlBuilder;
var insertColumns = entityInfo.Columns
@ -81,7 +81,7 @@ namespace SqlSugar
var updateColumnsSql = string.Join(" , ", updateColumns.Select(it => $"tgt.{sqlBuilder.GetTranslationColumnName(it)}=src.{sqlBuilder.GetTranslationColumnName(it)}"));
var insertColumnsSqlTgt = string.Join(" , ", insertColumns.Select(it => sqlBuilder.GetTranslationColumnName(it.DbColumnName)));
var insertColumnsSqlsrc = string.Join(" , ", insertColumns.Select(it => "src." + sqlBuilder.GetTranslationColumnName(it.DbColumnName)));
var sql = $@"MERGE INTO {sqlBuilder.GetTranslationColumnName(entityInfo.DbTableName)} tgt
var sql = $@"MERGE INTO {sqlBuilder.GetTranslationColumnName(tableName)} tgt
USING {sqlBuilder.GetTranslationColumnName(dt.TableName)} src
ON ({whereSql})
WHEN MATCHED THEN

View File

@ -176,12 +176,12 @@ namespace SqlSugar
return result;
}
public async Task<int> Merge<T>(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns, List<T> datas) where T : class, new()
public async Task<int> Merge<T>(string tableName,DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns, List<T> datas) where T : class, new()
{
var result = 0;
await this.Context.Utilities.PageEachAsync(datas, 2000, async pageItems =>
{
var x = await this.Context.Storageable(pageItems).WhereColumns(whereColumns).ToStorageAsync();
var x = await this.Context.Storageable(pageItems).As(tableName).WhereColumns(whereColumns).ToStorageAsync();
result += await x.BulkCopyAsync();
result += await x.BulkUpdateAsync(updateColumns);
return result;