From 385c3d15ecf1e74365ffa6989606fba4a6a6216b Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Fri, 21 Jun 2024 13:12:01 +0800 Subject: [PATCH] Synchronization code --- .../Abstract/AopProvider/AopProvider.cs | 1 + .../DeleteProvider/DeleteableProvider.cs | 21 +++++++++++ .../InsertableProvider/InsertableHelper.cs | 35 +++++++++++++++++++ .../UpdateProvider/UpdateableHelper.cs | 35 +++++++++++++++++++ .../UpdateProvider/UpdateableProvider.cs | 2 +- .../SqlSugar/Entities/ConnectionConfig.cs | 1 + 6 files changed, 94 insertions(+), 1 deletion(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/AopProvider/AopProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/AopProvider/AopProvider.cs index b22f89a4b..01949351d 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/AopProvider/AopProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/AopProvider/AopProvider.cs @@ -20,6 +20,7 @@ namespace SqlSugar public Action OnLogExecuted { set { this.Context.CurrentConnectionConfig.AopEvents.OnLogExecuted = value; } } public Func> OnExecutingChangeSql { set { this.Context.CurrentConnectionConfig.AopEvents.OnExecutingChangeSql = value; } } public virtual Action DataExecuting { set { this.Context.CurrentConnectionConfig.AopEvents.DataExecuting = value; } } + public Action DataChangesExecuted { set { this.Context.CurrentConnectionConfig.AopEvents.DataChangesExecuted = value; } } public virtual Action DataExecuted { set { this.Context.CurrentConnectionConfig.AopEvents.DataExecuted = value; } } } } diff --git a/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs index 4b93f255f..9032e2317 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs @@ -708,6 +708,7 @@ namespace SqlSugar if (this.RemoveCacheFunc != null) { this.RemoveCacheFunc(); } + DataChangesAop(this.DeleteObjects); } private void Before(string sql) @@ -769,5 +770,25 @@ namespace SqlSugar dataEvent(deleteObj,model); } } + private void DataChangesAop(List deleteObjs) + { + var dataEvent = this.Context.CurrentConnectionConfig.AopEvents?.DataChangesExecuted; + if(dataEvent != null&&deleteObjs != null) + { + foreach (var deleteObj in deleteObjs) + { + if (deleteObj != null) + { + var model = new DataFilterModel() + { + OperationType = DataFilterType.DeleteByObject, + EntityValue = deleteObj, + EntityColumnInfo = this.EntityInfo.Columns.FirstOrDefault() + }; + dataEvent(deleteObj, model); + } + } + } + } } } diff --git a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableHelper.cs b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableHelper.cs index ac08a205f..af8371b5f 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableHelper.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableHelper.cs @@ -224,6 +224,40 @@ namespace SqlSugar } } + private void DataChangeAop(T [] items) + { + + var dataEvent = this.Context.CurrentConnectionConfig.AopEvents?.DataChangesExecuted; + if (dataEvent != null) + { + foreach (var item in items) + { + if (item != null&& !(item is Dictionary)) + { + foreach (var columnInfo in this.EntityInfo.Columns) + { + if (columnInfo.ForOwnsOnePropertyInfo != null) + { + var data = columnInfo.ForOwnsOnePropertyInfo.GetValue(item, null); + if (data != null) + { + dataEvent(columnInfo.PropertyInfo.GetValue(data, null), new DataFilterModel() { OperationType = DataFilterType.InsertByObject, EntityValue = item, EntityColumnInfo = columnInfo }); + } + } + else if (columnInfo.PropertyInfo.Name == "Item" && columnInfo.IsIgnore) + { + //class index + } + else + { + dataEvent(columnInfo.PropertyInfo.GetValue(item, null), new DataFilterModel() { OperationType = DataFilterType.InsertByObject, EntityValue = item, EntityColumnInfo = columnInfo }); + } + } + } + } + } + } + private void SetInsertItemByDic(int i, T item, List insertItem) { foreach (var column in (item as Dictionary).OrderBy(it=>it.Key)) @@ -455,6 +489,7 @@ namespace SqlSugar { this.RemoveCacheFunc(); } + DataChangeAop(this.InsertObjs); } protected void Before(string sql) { diff --git a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableHelper.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableHelper.cs index 0b3d0c9d1..a5f9fcfd3 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableHelper.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableHelper.cs @@ -292,6 +292,39 @@ namespace SqlSugar } } + private void DataChangesAop(T [] items) + { + var dataEvent = this.Context.CurrentConnectionConfig.AopEvents?.DataChangesExecuted; + if (dataEvent != null) + { + foreach (var item in items) + { + if (item != null) + { + foreach (var columnInfo in this.EntityInfo.Columns) + { + if (columnInfo.ForOwnsOnePropertyInfo != null) + { + var data = columnInfo.ForOwnsOnePropertyInfo.GetValue(item, null); + if (data != null) + { + dataEvent(columnInfo.PropertyInfo.GetValue(data, null), new DataFilterModel() { OperationType = DataFilterType.UpdateByObject, EntityValue = item, EntityColumnInfo = columnInfo }); + } + } + else if (columnInfo.PropertyInfo.Name == "Item" && columnInfo.IsIgnore) + { + //class index + } + else + { + dataEvent(columnInfo.PropertyInfo.GetValue(item, null), new DataFilterModel() { OperationType = DataFilterType.UpdateByObject, EntityValue = item, EntityColumnInfo = columnInfo }); + } + } + } + } + } + } + private void CheckTranscodeing(bool checkIsJson = true) { if (this.EntityInfo.Columns.Any(it => it.IsTranscoding)) @@ -670,6 +703,8 @@ namespace SqlSugar { this.RemoveCacheFunc(); } + + DataChangesAop(this.UpdateObjs); } private string _ExecuteCommandWithOptLock(T updateData,ref object oldVerValue) { diff --git a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index 1d3466b25..97ed73a2a 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -183,7 +183,7 @@ namespace SqlSugar return 0; } var result = await this.Ado.ExecuteCommandAsync(sql, UpdateBuilder.Parameters == null ? null : UpdateBuilder.Parameters.ToArray()); - After(sql); + After(sql); return result; } public Task ExecuteCommandHasChangeAsync(CancellationToken token) diff --git a/Src/Asp.Net/SqlSugar/Entities/ConnectionConfig.cs b/Src/Asp.Net/SqlSugar/Entities/ConnectionConfig.cs index 4d22d31f6..d30b4dce4 100644 --- a/Src/Asp.Net/SqlSugar/Entities/ConnectionConfig.cs +++ b/Src/Asp.Net/SqlSugar/Entities/ConnectionConfig.cs @@ -92,6 +92,7 @@ namespace SqlSugar public Action OnLogExecuted { get; set; } public Func> OnExecutingChangeSql { get; set; } public Action DataExecuting { get; set; } + public Action DataChangesExecuted { get; set; } public Action DataExecuted { get; set; } } public class ConfigureExternalServices