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