diff --git a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableHelper.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableHelper.cs index 92764c1b8..5cacb0e04 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableHelper.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableHelper.cs @@ -735,6 +735,9 @@ namespace SqlSugar { Check.Exception(UpdateParameterIsNull == false, ErrorMessage.GetThrowMessage(" no support SetColumns and Where", "根据对像更新 db.Updateabe(对象) 禁止使用 SetColumns和Where ,你可以使用WhereColumns 和 UpdateColumns。 更新分为2种方式 1.根据表达式更新 2.根据实体或者集合更新 , 具体用法请查看文档 ")); } - + private void ThrowUpdateByExpressionByMesage(string message) + { + Check.Exception(UpdateParameterIsNull == true, ErrorMessage.GetThrowMessage(" no support "+ message, "根据对像更新 db.Updateabe(对象) 禁止使用 SetColumns和Where ,你可以使用 "+ message + "。 更新分为2种方式 1.根据表达式更新 2.根据实体或者集合更新 , 具体用法请查看文档 ")); + } } } diff --git a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateablePage.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateablePage.cs new file mode 100644 index 000000000..52a5da9f3 --- /dev/null +++ b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateablePage.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 UpdateablePage where T:class,new() + { + public T[] DataList { get; set; } + public SqlSugarProvider 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.Updateable(pageItem).AS(TableName).EnableDiffLogEventIF(IsEnableDiffLogEvent, DiffModel).UpdateColumns(UpdateColumns.ToArray()).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.Updateable(pageItem).AS(TableName).EnableDiffLogEventIF(IsEnableDiffLogEvent, DiffModel).UpdateColumns(UpdateColumns.ToArray()).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.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index 15e025c07..ff22a892b 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -173,6 +173,20 @@ namespace SqlSugar #endregion #region Common + public UpdateablePage PageSize(int pageSize) + { + ThrowUpdateByExpressionByMesage(" PageSize(num) "); + UpdateablePage result = new UpdateablePage(); + result.PageSize = pageSize; + result.Context = this.Context; + result.DataList = this.UpdateObjs; + result.TableName = this.UpdateBuilder.TableName; + result.IsEnableDiffLogEvent = this.IsEnableDiffLogEvent; + result.DiffModel = this.diffModel; + if (this.UpdateBuilder.DbColumnInfoList.Any()) + result.UpdateColumns = this.UpdateBuilder.DbColumnInfoList.GroupBy(it => it.TableId).First().Select(it => it.DbColumnName).ToList(); + return result; + } public IUpdateable InnerJoin(Expression> joinExpress) { UpdateableProvider result = new UpdateableProvider(); diff --git a/Src/Asp.Net/SqlSugar/Interface/IUpdateable.cs b/Src/Asp.Net/SqlSugar/Interface/IUpdateable.cs index ca247f9de..e5962cf79 100644 --- a/Src/Asp.Net/SqlSugar/Interface/IUpdateable.cs +++ b/Src/Asp.Net/SqlSugar/Interface/IUpdateable.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; +using System.Security.Permissions; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -114,6 +115,7 @@ namespace SqlSugar IUpdateable EnableQueryFilter(); IUpdateable Clone(); IUpdateable InnerJoin(Expression> joinExpress); + UpdateablePage PageSize(int pageSize); } public interface IUpdateable {