From be58b9ee0f626d1062cbea3cab15c20b6f453c5a Mon Sep 17 00:00:00 2001 From: sunkaixuna <610262374@qq.com> Date: Thu, 5 Aug 2021 10:56:57 +0800 Subject: [PATCH] Update inserable.UseParameter --- .../InsertableProvider/ParameterInsertable.cs | 21 +++++++++++++++++++ .../SqlSugar/Infrastructure/ContextMethods.cs | 14 +++++++++++++ .../SqlSugar/Interface/IContextMethods.cs | 1 + .../Interface/IParameterInsertable.cs | 5 ++++- 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/ParameterInsertable.cs b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/ParameterInsertable.cs index 1a3f0fad4..c7a7aff67 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/ParameterInsertable.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/ParameterInsertable.cs @@ -32,5 +32,26 @@ namespace SqlSugar }); return 0; } + public async Task ExecuteCommandAsync() + { + var inserable = Inserable as InsertableProvider; + var columns = inserable.InsertBuilder.DbColumnInfoList.GroupBy(it => it.DbColumnName).Select(it => it.Key).Distinct().ToList(); + var tableWithString = inserable.InsertBuilder.TableWithString; + var removeCacheFunc = inserable.RemoveCacheFunc; + var objects = inserable.InsertObjs; + await this.Context.Utilities.PageEachAsync(objects, 60, pagelist => + { + foreach (var item in pagelist) + { + var itemable = this.Context.Insertable(item); + itemable.InsertBuilder.DbColumnInfoList = itemable.InsertBuilder.DbColumnInfoList.Where(it => columns.Contains(it.DbColumnName)).ToList(); + itemable.InsertBuilder.TableWithString = tableWithString; + (itemable as InsertableProvider).RemoveCacheFunc = removeCacheFunc; + itemable.AddQueue(); + } + return this.Context.SaveQueuesAsync(false); + }); + return objects.Length; + } } } diff --git a/Src/Asp.Net/SqlSugar/Infrastructure/ContextMethods.cs b/Src/Asp.Net/SqlSugar/Infrastructure/ContextMethods.cs index db95bbd85..d6f93c290 100644 --- a/Src/Asp.Net/SqlSugar/Infrastructure/ContextMethods.cs +++ b/Src/Asp.Net/SqlSugar/Infrastructure/ContextMethods.cs @@ -638,6 +638,20 @@ namespace SqlSugar } } } + + public async Task PageEachAsync(IEnumerable pageItems, int pageSize, Func,Task> action) + { + if (pageItems != null && pageItems.Any()) + { + int totalRecord = pageItems.Count(); + int pageCount = (totalRecord + pageSize - 1) / pageSize; + for (int i = 1; i <= pageCount; i++) + { + var list = pageItems.Skip((i - 1) * pageSize).Take(pageSize).ToList(); + await action(list); + } + } + } #endregion } } diff --git a/Src/Asp.Net/SqlSugar/Interface/IContextMethods.cs b/Src/Asp.Net/SqlSugar/Interface/IContextMethods.cs index dff5adbf4..e49f10934 100644 --- a/Src/Asp.Net/SqlSugar/Interface/IContextMethods.cs +++ b/Src/Asp.Net/SqlSugar/Interface/IContextMethods.cs @@ -35,5 +35,6 @@ namespace SqlSugar void RemoveCacheAll(); void RemoveCache(string key); void PageEach(IEnumerable pageItems, int pageSize, Action> action); + Task PageEachAsync(IEnumerable pageItems, int pageSize, Func, Task> action); } } diff --git a/Src/Asp.Net/SqlSugar/Interface/IParameterInsertable.cs b/Src/Asp.Net/SqlSugar/Interface/IParameterInsertable.cs index 6db76f671..35571411c 100644 --- a/Src/Asp.Net/SqlSugar/Interface/IParameterInsertable.cs +++ b/Src/Asp.Net/SqlSugar/Interface/IParameterInsertable.cs @@ -1,7 +1,10 @@ -namespace SqlSugar +using System.Threading.Tasks; + +namespace SqlSugar { public interface IParameterInsertable { int ExecuteCommand(); + Task ExecuteCommandAsync(); } } \ No newline at end of file