mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-07-17 01:46:18 +08:00
Update Fastest.BulkMege
This commit is contained in:
parent
90f57098ca
commit
cbad3083ee
@ -48,9 +48,17 @@ namespace SqlSugar
|
|||||||
dt.TableName = "#temp";
|
dt.TableName = "#temp";
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual Task<int> Merge(DataTable dt, EntityInfo entityInfo,string[] whereColumns,string [] updateColumns)
|
public async virtual Task<int> Merge<T>(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns, List<T> datas)
|
||||||
{
|
{
|
||||||
throw new Exception("当前数据库还没有支持Merge方法,请联系作者支持");
|
var result = 0;
|
||||||
|
await this.Context.Utilities.PageEachAsync(datas,2000,async pageItems =>
|
||||||
|
{
|
||||||
|
var x = await this.Context.Storageable(pageItems).WhereColumns(whereColumns).ToStorageAsync();
|
||||||
|
result += await x.BulkCopyAsync();
|
||||||
|
result += await x.BulkUpdateAsync(updateColumns);
|
||||||
|
return result;
|
||||||
|
});
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -218,7 +218,7 @@ namespace SqlSugar
|
|||||||
buider.Context = context;
|
buider.Context = context;
|
||||||
await buider.CreateTempAsync<T>(dt);
|
await buider.CreateTempAsync<T>(dt);
|
||||||
await buider.ExecuteBulkCopyAsync(dt);
|
await buider.ExecuteBulkCopyAsync(dt);
|
||||||
var result = await buider.Merge(dt, this.entityInfo,whereColumns,updateColumns);
|
var result = await buider.Merge(dt, this.entityInfo,whereColumns,updateColumns, datas);
|
||||||
//var queryTemp = this.context.Queryable<T>().AS(dt.TableName).ToList();//test
|
//var queryTemp = this.context.Queryable<T>().AS(dt.TableName).ToList();//test
|
||||||
//var result = await buider.UpdateByTempAsync(GetTableName(), dt.TableName, updateColumns, whereColumns);
|
//var result = await buider.UpdateByTempAsync(GetTableName(), dt.TableName, updateColumns, whereColumns);
|
||||||
if (this.context.CurrentConnectionConfig.DbType != DbType.Sqlite)
|
if (this.context.CurrentConnectionConfig.DbType != DbType.Sqlite)
|
||||||
|
@ -18,6 +18,6 @@ namespace SqlSugar
|
|||||||
Task<int> ExecuteBulkCopyAsync(DataTable dt);
|
Task<int> ExecuteBulkCopyAsync(DataTable dt);
|
||||||
Task CreateTempAsync<T>(DataTable dt) where T : class, new();
|
Task CreateTempAsync<T>(DataTable dt) where T : class, new();
|
||||||
void CloseDb();
|
void CloseDb();
|
||||||
Task<int> Merge(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns);
|
Task<int> Merge<T>(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns,List<T> datas);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using Oracle.ManagedDataAccess.Client;
|
using Oracle.ManagedDataAccess.Client;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@ -66,7 +67,7 @@ namespace SqlSugar
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Task<int> Merge(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns)
|
public override Task<int> Merge<T>(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns,List<T> datas)
|
||||||
{
|
{
|
||||||
Check.Exception(this.entityInfo.Columns.Any(it => it.OracleSequenceName.HasValue()), "The BulkMerge method cannot be used for sequence", "BulkMerge方法不能用序列");
|
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;
|
var sqlBuilder = this.Context.Queryable<object>().SqlBuilder;
|
||||||
|
@ -66,7 +66,7 @@ namespace SqlSugar
|
|||||||
copy.BulkCopyTimeout = this.Context.Ado.CommandTimeOut;
|
copy.BulkCopyTimeout = this.Context.Ado.CommandTimeOut;
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
public override Task<int> Merge(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns)
|
public override Task<int> Merge<T>(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns, List<T> datas)
|
||||||
{
|
{
|
||||||
var sqlBuilder = this.Context.Queryable<object>().SqlBuilder;
|
var sqlBuilder = this.Context.Queryable<object>().SqlBuilder;
|
||||||
var insertColumns = entityInfo.Columns
|
var insertColumns = entityInfo.Columns
|
||||||
|
@ -176,9 +176,17 @@ namespace SqlSugar
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<int> Merge(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns)
|
public async Task<int> Merge<T>(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns, List<T> datas)
|
||||||
{
|
{
|
||||||
throw new Exception("未实现");
|
var result = 0;
|
||||||
|
await this.Context.Utilities.PageEachAsync(datas, 2000, async pageItems =>
|
||||||
|
{
|
||||||
|
var x = await this.Context.Storageable(pageItems).WhereColumns(whereColumns).ToStorageAsync();
|
||||||
|
result += await x.BulkCopyAsync();
|
||||||
|
result += await x.BulkUpdateAsync(updateColumns);
|
||||||
|
return result;
|
||||||
|
});
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user