From d3b8ecaf4d0b2a99aff042d19da04db3c92a99ca Mon Sep 17 00:00:00 2001 From: sunkaixuna <610262374@qq.com> Date: Fri, 19 Nov 2021 18:34:56 +0800 Subject: [PATCH] Update db.Fastest --- .../Abstract/FastestProvider/FastBuilder.cs | 46 +++++++++++++++++++ .../FastestProvider/FastestProvider.cs | 2 +- .../{_Private.cs => Private.cs} | 0 .../{_Setting.cs => Setting.cs} | 0 .../SqlBuilder/SqlServerFastBuilder.cs | 35 +------------- Src/Asp.Net/SqlSugar/SqlSugar.csproj | 5 +- 6 files changed, 52 insertions(+), 36 deletions(-) create mode 100644 Src/Asp.Net/SqlSugar/Abstract/FastestProvider/FastBuilder.cs rename Src/Asp.Net/SqlSugar/Abstract/FastestProvider/{_Private.cs => Private.cs} (100%) rename Src/Asp.Net/SqlSugar/Abstract/FastestProvider/{_Setting.cs => Setting.cs} (100%) diff --git a/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/FastBuilder.cs b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/FastBuilder.cs new file mode 100644 index 000000000..12d350386 --- /dev/null +++ b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/FastBuilder.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public class FastBuilder + { + public SqlSugarProvider Context { get; set; } + + public string UpdateSql { get; set; } = @"UPDATE TM + SET {0} + FROM {1} TM + INNER JOIN {2} TE ON {3} "; + + + public void CloseDb() + { + if (this.Context.CurrentConnectionConfig.IsAutoCloseConnection && this.Context.Ado.Transaction == null) + { + this.Context.Ado.Connection.Close(); + } + } + + public async Task UpdateByTempAsync(string tableName, string tempName, string[] updateColumns, string[] whereColumns) + { + Check.ArgumentNullException(!updateColumns.Any(), "update columns count is 0"); + Check.ArgumentNullException(!whereColumns.Any(), "where columns count is 0"); + var sets = string.Join(",", updateColumns.Select(it => $"TM.{it}=TE.{it}")); + var wheres = string.Join(",", whereColumns.Select(it => $"TM.{it}=TE.{it}")); + string sql = string.Format(UpdateSql, sets, tableName, tempName, wheres); + return await this.Context.Ado.ExecuteCommandAsync(sql); + } + + public async Task CreateTempAsync(DataTable dt) where T : class, new() + { + await this.Context.UnionAll( + this.Context.Queryable().Where(it => false).AS(dt.TableName), + this.Context.Queryable().Where(it => false).AS(dt.TableName)).Select("top 1 * into #temp").ToListAsync(); + dt.TableName = "#temp"; + } + } +} diff --git a/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/FastestProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/FastestProvider.cs index 35aaf1777..9ff7792f2 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/FastestProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/FastestProvider.cs @@ -94,7 +94,7 @@ namespace SqlSugar private async Task _BulkCopy(List datas) { DataTable dt = ToDdateTable(datas); - IFastBuilder buider = new SqlServerFastBuilder(); + IFastBuilder buider =GetBuider(); buider.Context = context; var result = await buider.ExecuteBulkCopyAsync(dt); return result; diff --git a/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/_Private.cs b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/Private.cs similarity index 100% rename from Src/Asp.Net/SqlSugar/Abstract/FastestProvider/_Private.cs rename to Src/Asp.Net/SqlSugar/Abstract/FastestProvider/Private.cs diff --git a/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/_Setting.cs b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/Setting.cs similarity index 100% rename from Src/Asp.Net/SqlSugar/Abstract/FastestProvider/_Setting.cs rename to Src/Asp.Net/SqlSugar/Abstract/FastestProvider/Setting.cs diff --git a/Src/Asp.Net/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerFastBuilder.cs b/Src/Asp.Net/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerFastBuilder.cs index f00232616..133eac911 100644 --- a/Src/Asp.Net/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerFastBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerFastBuilder.cs @@ -8,16 +8,9 @@ using System.Threading.Tasks; namespace SqlSugar { - public class SqlServerFastBuilder: IFastBuilder + + public class SqlServerFastBuilder:FastBuilder,IFastBuilder { - - public SqlSugarProvider Context { get; set; } - - public string UpdateSql { get; set; } = @"UPDATE TM - SET {0} - FROM {1} TM - INNER JOIN {2} TE ON {3} "; - public async Task ExecuteBulkCopyAsync(DataTable dt) { @@ -52,30 +45,6 @@ namespace SqlSugar } return copy; } - public void CloseDb() - { - if (this.Context.CurrentConnectionConfig.IsAutoCloseConnection && this.Context.Ado.Transaction == null) - { - this.Context.Ado.Connection.Close(); - } - } - public async Task UpdateByTempAsync(string tableName, string tempName, string[] updateColumns, string[] whereColumns) - { - Check.ArgumentNullException(!updateColumns.Any(),"update columns count is 0"); - Check.ArgumentNullException(!whereColumns.Any(), "where columns count is 0"); - var sets = string.Join(",", updateColumns.Select(it=>$"TM.{it}=TE.{it}")); - var wheres = string.Join(",", whereColumns.Select(it => $"TM.{it}=TE.{it}")); - string sql = string.Format(UpdateSql,sets, tableName,tempName, wheres); - return await this.Context.Ado.ExecuteCommandAsync(sql); - } - - public async Task CreateTempAsync(DataTable dt) where T :class,new() - { - await this.Context.UnionAll( - this.Context.Queryable().Where(it => false).AS(dt.TableName), - this.Context.Queryable().Where(it => false).AS(dt.TableName)).Select("top 1 * into #temp").ToListAsync(); - dt.TableName = "#temp"; - } } } diff --git a/Src/Asp.Net/SqlSugar/SqlSugar.csproj b/Src/Asp.Net/SqlSugar/SqlSugar.csproj index 578ada074..ce16935bf 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugar.csproj +++ b/Src/Asp.Net/SqlSugar/SqlSugar.csproj @@ -88,9 +88,10 @@ + - - + +