mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-18 09:44:39 +08:00
Update BulkMerge
This commit is contained in:
@@ -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;
|
||||
|
@@ -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)
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
|
@@ -40,7 +40,7 @@ namespace SqlSugar
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task<int> Merge<T>(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns, List<T> datas) where T : class, new()
|
||||
public Task<int> Merge<T>(string tableName, DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns, List<T> datas) where T : class, new()
|
||||
{
|
||||
throw new Exception("Only.net CORE is supported");
|
||||
}
|
||||
|
@@ -66,7 +66,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
|
||||
@@ -80,7 +80,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
|
||||
|
@@ -142,12 +142,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;
|
||||
|
Reference in New Issue
Block a user