From 54e10e81f83e5370ac61adc4a8c5a625ea861908 Mon Sep 17 00:00:00 2001 From: sunkaixuna <610262374@qq.com> Date: Sat, 30 Oct 2021 20:37:17 +0800 Subject: [PATCH] Split table --- .../SplitTableDeleteProvider.cs | 4 +- .../InsertableProvider/SplitInsertable.cs | 66 ++++++++++++++++++- 2 files changed, 67 insertions(+), 3 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/SplitTableDeleteProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/SplitTableDeleteProvider.cs index 74cf0f77c..83cf69d1c 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/SplitTableDeleteProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/SplitTableDeleteProvider.cs @@ -57,7 +57,7 @@ namespace SqlSugar return await _ExecuteCommandAsync(); } } - public int _ExecuteCommand() + internal int _ExecuteCommand() { var result = 0; var sqlobj = deleteobj.ToSql(); @@ -70,7 +70,7 @@ namespace SqlSugar return result; } - public async Task _ExecuteCommandAsync() + internal async Task _ExecuteCommandAsync() { var result = 0; var sqlobj = deleteobj.ToSql(); diff --git a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/SplitInsertable.cs b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/SplitInsertable.cs index ddad11900..bc50ae332 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/SplitInsertable.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/SplitInsertable.cs @@ -16,6 +16,50 @@ namespace SqlSugar internal List> TableNames { get; set; } public int ExecuteCommand() + { + if (this.Context.Ado.Transaction == null) + { + try + { + this.Context.Ado.BeginTran(); + var result = _ExecuteCommand(); + this.Context.Ado.CommitTran(); + return result; + } + catch (Exception ex) + { + this.Context.Ado.RollbackTran(); + throw ex; + } + } + else + { + return _ExecuteCommand(); + } + } + public async Task ExecuteCommandAsync() + { + if (this.Context.Ado.Transaction == null) + { + try + { + this.Context.Ado.BeginTran(); + var result = await _ExecuteCommandAsync(); + this.Context.Ado.BeginTran(); + return result; + } + catch (Exception ex) + { + this.Context.Ado.RollbackTran(); + throw ex; + } + } + else + { + return await _ExecuteCommandAsync(); + } + } + internal int _ExecuteCommand() { CreateTable(); var result = 0; @@ -36,7 +80,27 @@ namespace SqlSugar } return result; } - + internal async Task _ExecuteCommandAsync() + { + CreateTable(); + var result = 0; + var groups = TableNames.GroupBy(it => it.Key).ToList(); + var parent = ((InsertableProvider)Inserable); + var names = parent.InsertBuilder.DbColumnInfoList.GroupBy(it => it.DbColumnName).Select(i => i.Key).ToList(); + foreach (var item in groups) + { + var list = item.Select(it => it.Value as T).ToList(); + var groupInserable = (InsertableProvider)this.Context.Insertable(list); + groupInserable.InsertBuilder.TableWithString = parent.InsertBuilder.TableWithString; + groupInserable.RemoveCacheFunc = parent.RemoveCacheFunc; + groupInserable.diffModel = parent.diffModel; + groupInserable.IsEnableDiffLogEvent = parent.IsEnableDiffLogEvent; + groupInserable.InsertBuilder.IsNoInsertNull = parent.InsertBuilder.IsNoInsertNull; + groupInserable.IsOffIdentity = parent.IsOffIdentity; + result +=await groupInserable.AS(item.Key).InsertColumns(names.ToArray()).ExecuteCommandAsync(); + } + return result; + } private void CreateTable() { var isLog = this.Context.Ado.IsEnableLogEvent;