From d659e56ff02f9dee6c0fb81e96614c6927478bab Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Wed, 30 Aug 2023 18:43:18 +0800 Subject: [PATCH] Synchronization code --- .../Abstract/DeleteProvider/DeleteablePage.cs | 87 +++++++++++++++++++ .../DeleteProvider/DeleteableProvider.cs | 12 +++ .../SqlSugar/Interface/IDeleteable.cs | 1 + 3 files changed, 100 insertions(+) create mode 100644 Src/Asp.NetCore2/SqlSugar/Abstract/DeleteProvider/DeleteablePage.cs diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/DeleteProvider/DeleteablePage.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/DeleteProvider/DeleteablePage.cs new file mode 100644 index 000000000..cff888e12 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/DeleteProvider/DeleteablePage.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public class DeleteablePage where T:class,new() + { + public T[] DataList { get; set; } + public ISqlSugarClient Context { get; set; } + public int PageSize { get; internal set; } + public string TableName { get; internal set; } + public bool IsEnableDiffLogEvent { get; internal set; } + public DiffLogModel DiffModel { get; internal set; } + public List UpdateColumns { get; internal set; } + public int ExecuteCommand() + { + if (DataList.Count() == 1 && DataList.First() == null) + { + return 0; + } + if (PageSize == 0) { PageSize = 1000; } + var result = 0; + var isNoTran = this.Context.Ado.IsNoTran(); + try + { + if (isNoTran) + { + this.Context.Ado.BeginTran(); + } + this.Context.Utilities.PageEach(DataList, PageSize, pageItem => + { + result += this.Context.Deleteable(pageItem).AS(TableName).EnableDiffLogEventIF(IsEnableDiffLogEvent, DiffModel).ExecuteCommand(); + }); + if (isNoTran) + { + this.Context.Ado.CommitTran(); + } + } + catch (Exception) + { + if (isNoTran) + { + this.Context.Ado.RollbackTran(); + } + throw; + } + return result; + } + public async Task ExecuteCommandAsync() + { + if (DataList.Count() == 1 && DataList.First() == null) + { + return 0; + } + if (PageSize == 0) { PageSize = 1000; } + var result = 0; + var isNoTran = this.Context.Ado.IsNoTran(); + try + { + if (isNoTran) + { + await this.Context.Ado.BeginTranAsync(); + } + await this.Context.Utilities.PageEachAsync(DataList, PageSize, async pageItem => + { + result += await this.Context.Deleteable(pageItem).AS(TableName).EnableDiffLogEventIF(IsEnableDiffLogEvent, DiffModel).ExecuteCommandAsync(); + }); + if (isNoTran) + { + await this.Context.Ado.CommitTranAsync(); + } + } + catch (Exception) + { + if (isNoTran) + { + await this.Context.Ado.RollbackTranAsync(); + } + throw; + } + return result; + } + } +} diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs index d1489fa53..bc9840690 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs @@ -524,6 +524,18 @@ namespace SqlSugar return this; } + public DeleteablePage PageSize(int pageSize) + { + Check.ExceptionEasy(this.DeleteObjects == null, "PageSize can only be deleted as a List entity collection", "Deleteable.PageSize()只能是List实体集合方式删除,并且集合不能为null"); + DeleteablePage result = new DeleteablePage(); + result.DataList = this.DeleteObjects.ToArray(); + result.Context = this.Context; + result.DiffModel = this.diffModel; + result.IsEnableDiffLogEvent= this.IsEnableDiffLogEvent; + result.TableName = this.DeleteBuilder.AsName; + result.PageSize = pageSize; + return result; + } public IDeleteable With(string lockString) { if (this.Context.CurrentConnectionConfig.DbType == DbType.SqlServer) diff --git a/Src/Asp.NetCore2/SqlSugar/Interface/IDeleteable.cs b/Src/Asp.NetCore2/SqlSugar/Interface/IDeleteable.cs index 9da3547fb..2c2ce427b 100644 --- a/Src/Asp.NetCore2/SqlSugar/Interface/IDeleteable.cs +++ b/Src/Asp.NetCore2/SqlSugar/Interface/IDeleteable.cs @@ -22,6 +22,7 @@ namespace SqlSugar IDeleteable Where(T deleteObj); IDeleteable Where(Expression> expression); IDeleteable Where(List deleteObjs); + DeleteablePage PageSize(int pageSize); IDeleteable In(PkType primaryKeyValue); IDeleteable In(PkType[] primaryKeyValues); IDeleteable In(List primaryKeyValues);