From 69d4e34e98074716d99ed20ef660aa1c4d122ffc Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sun, 12 Mar 2023 12:06:47 +0800 Subject: [PATCH] Batch tracing is asynchronous --- .../UpdateProvider/UpdateableHelper.cs | 39 +++++++++++++++++++ .../UpdateProvider/UpdateableProvider.cs | 5 +++ 2 files changed, 44 insertions(+) diff --git a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableHelper.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableHelper.cs index 0f22301a9..29ee800a5 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableHelper.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableHelper.cs @@ -50,6 +50,45 @@ namespace SqlSugar } return trakRows; } + private async Task DatasTrackingExecommandAsync() + { + var trakRows = 0; + try + { + if (this.Context.Ado.IsNoTran()) + { + await this.Context.Ado.BeginTranAsync(); + } + int i = 0; + foreach (var item in this.UpdateObjs) + { + var newUpdateable = this.Clone(); + (newUpdateable as UpdateableProvider).UpdateObjs = new[] { item }; + newUpdateable.UpdateBuilder.IsListUpdate = null; + newUpdateable.UpdateBuilder.DbColumnInfoList = + newUpdateable.UpdateBuilder.DbColumnInfoList.Where(it => it.TableId == i).ToList(); + AppendTracking(item, newUpdateable); + if (newUpdateable.UpdateBuilder.DbColumnInfoList?.Any() == true) + { + trakRows +=await newUpdateable.ExecuteCommandAsync(); + } + ++i; + } + if (this.Context.Ado.IsNoTran()) + { + await this.Context.Ado.CommitTranAsync(); + } + } + catch (Exception) + { + if (this.Context.Ado.IsNoTran()) + { + await this.Context.Ado.RollbackTranAsync(); + } + throw; + } + return trakRows; + } private bool UpdateObjectNotWhere() { return this.Context.CurrentConnectionConfig.DbType != DbType.MySql diff --git a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index b1a140278..0560d8259 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -116,6 +116,11 @@ namespace SqlSugar public virtual async Task ExecuteCommandAsync() { + if (this.IsTrakingDatas()) + { + int trakRows =await DatasTrackingExecommandAsync(); + return trakRows; + } string sql = _ExecuteCommand(); if (string.IsNullOrEmpty(sql)) {