From 24cc8bc1daa59987d8df6d370c8e76ac018cab5f Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Mon, 2 Mar 2020 18:57:53 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E8=B0=83=E6=95=B4=20Aop=20=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=20event=20=E4=BA=8B=E4=BB=B6=EF=BC=9B=20-=20=E8=B0=83?= =?UTF-8?q?=E6=95=B4=20Ado.AopCommandExecuting/AopCommandExecuted=20?= =?UTF-8?q?=E5=88=B0=20Aop.CommandBefore/After=EF=BC=9B=20-=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=20Aop.TraceBefore/After=20=E4=BA=8B=E4=BB=B6=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/dbcontext_01/Startup.cs | 8 +- Examples/restful/Startup.cs | 2 +- .../FreeSql.Extensions.LazyLoading.csproj | 3 - FreeSql.DbContext/DbSet/DbSetAsync.cs | 7 +- FreeSql.DbContext/DbSet/DbSetSync.cs | 7 +- FreeSql.DbContext/FreeSql.DbContext.xml | 14 +- FreeSql.DbContext/UnitOfWork/IUnitOfWork.cs | 5 + FreeSql.DbContext/UnitOfWork/UnitOfWork.cs | 62 ++++- .../FreeSql.Tests.Provider.Odbc/UnitTest1.cs | 2 +- .../DataAnnotations/MySqlFluentTest.cs | 4 +- FreeSql.Tests/FreeSql.Tests/UnitTest1.cs | 2 +- FreeSql.Tests/FreeSql.Tests/UnitTest2.cs | 2 +- FreeSql/FreeSql.csproj | 2 +- FreeSql/FreeSql.xml | 96 ++++++-- FreeSql/FreeSqlBuilder.cs | 12 +- FreeSql/Interface/IAdo.cs | 8 - FreeSql/Interface/IAop.cs | 167 ++++++++++++- FreeSql/Internal/CommonExpression.cs | 12 +- .../CommonProvider/AdoProvider/AdoProvider.cs | 79 +++---- .../AdoProvider/AdoProviderAsync.cs | 52 ++--- .../AdoProvider/AdoProviderTransaction.cs | 36 ++- .../Internal/CommonProvider/AopProvider.cs | 41 +++- .../CommonProvider/CodeFirstProvider.cs | 4 +- .../Internal/CommonProvider/DeleteProvider.cs | 4 +- .../CommonProvider/DeleteProviderAsync.cs | 4 +- .../Internal/CommonProvider/InsertProvider.cs | 219 +++++++++++------- .../CommonProvider/InsertProviderAsync.cs | 215 ++++++++++------- .../SelectProvider/Select0Provider.cs | 44 ++-- .../Internal/CommonProvider/UpdateProvider.cs | 152 +++++++----- .../CommonProvider/UpdateProviderAsync.cs | 142 ++++++++---- FreeSql/Internal/CommonUtils.cs | 12 +- .../Curd/MsAccessInsert.cs | 16 +- .../Curd/MySqlDelete.cs | 8 +- .../Curd/MySqlInsert.cs | 16 +- .../Curd/MySqlUpdate.cs | 8 +- .../Curd/OnDuplicateKeyUpdate.cs | 8 +- .../Dameng/Curd/OdbcDamengInsert.cs | 16 +- .../Default/Curd/OdbcInsert.cs | 8 +- .../GBase/Curd/__OdbcGBaseInsert.cs | 16 +- .../MySql/Curd/OdbcMySqlDelete.cs | 8 +- .../MySql/Curd/OdbcMySqlInsert.cs | 16 +- .../MySql/Curd/OdbcMySqlUpdate.cs | 8 +- .../Oracle/Curd/OdbcOracleInsert.cs | 16 +- .../PostgreSQL/Curd/OdbcPostgreSQLDelete.cs | 8 +- .../PostgreSQL/Curd/OdbcPostgreSQLInsert.cs | 24 +- .../PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs | 8 +- .../SqlServer/Curd/OdbcSqlServerDelete.cs | 8 +- .../SqlServer/Curd/OdbcSqlServerInsert.cs | 24 +- .../SqlServer/Curd/OdbcSqlServerUpdate.cs | 8 +- .../Curd/OracleInsert.cs | 16 +- .../Curd/OnConflictDoUpdate.cs | 8 +- .../Curd/PostgreSQLDelete.cs | 8 +- .../Curd/PostgreSQLInsert.cs | 24 +- .../Curd/PostgreSQLUpdate.cs | 8 +- .../Curd/SqlServerDelete.cs | 8 +- .../Curd/SqlServerInsert.cs | 16 +- .../Curd/SqlServerUpdate.cs | 8 +- .../Curd/SqliteInsert.cs | 8 +- 58 files changed, 1109 insertions(+), 638 deletions(-) diff --git a/Examples/dbcontext_01/Startup.cs b/Examples/dbcontext_01/Startup.cs index 777f8be3..6ac054d2 100644 --- a/Examples/dbcontext_01/Startup.cs +++ b/Examples/dbcontext_01/Startup.cs @@ -31,20 +31,20 @@ namespace dbcontext_01 (cmd, log) => Trace.WriteLine(log) ) .Build(); - Fsql.Aop.SyncStructureBefore = (s, e) => + Fsql.Aop.SyncStructureBefore += (s, e) => { Console.WriteLine(e.Identifier + ": " + string.Join(", ", e.EntityTypes.Select(a => a.FullName))); }; - Fsql.Aop.SyncStructureAfter = (s, e) => + Fsql.Aop.SyncStructureAfter += (s, e) => { Console.WriteLine(e.Identifier + ": " + string.Join(", ", e.EntityTypes.Select(a => a.FullName)) + " " + e.ElapsedMilliseconds + "ms\r\n" + e.Exception?.Message + e.Sql); }; - Fsql.Aop.CurdBefore = (s, e) => + Fsql.Aop.CurdBefore += (s, e) => { Console.WriteLine(e.Identifier + ": " + e.EntityType.FullName + ", " + e.Sql); }; - Fsql.Aop.CurdAfter = (s, e) => + Fsql.Aop.CurdAfter += (s, e) => { Console.WriteLine(e.Identifier + ": " + e.EntityType.FullName + " " + e.ElapsedMilliseconds + "ms, " + e.Sql); }; diff --git a/Examples/restful/Startup.cs b/Examples/restful/Startup.cs index 6079ae39..240e6286 100644 --- a/Examples/restful/Startup.cs +++ b/Examples/restful/Startup.cs @@ -18,7 +18,7 @@ namespace restful .UseAutoSyncStructure(true) .Build(); - Fsql.Aop.CurdAfter = (s, e) => + Fsql.Aop.CurdAfter += (s, e) => { if (e.ElapsedMilliseconds > 200) { diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index e78eae61..2a7cc192 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -16,9 +16,6 @@ $(AssemblyName) true true - true - key.snk - false diff --git a/FreeSql.DbContext/DbSet/DbSetAsync.cs b/FreeSql.DbContext/DbSet/DbSetAsync.cs index df1a2c00..68d6b0bb 100644 --- a/FreeSql.DbContext/DbSet/DbSetAsync.cs +++ b/FreeSql.DbContext/DbSet/DbSetAsync.cs @@ -160,7 +160,9 @@ namespace FreeSql await DbContextExecCommandAsync(); //删除没有保存的数据 var propValEach = GetItemValue(item, prop) as IEnumerable; - await _db.Orm.Delete().AsType(tref.RefEntityType).WhereDynamic(propValEach, true).ExecuteAffrowsAsync(); + await _db.Orm.Delete().AsType(tref.RefEntityType) + .WithTransaction(_uow?.GetOrBeginTransaction()) + .WhereDynamic(propValEach, true).ExecuteAffrowsAsync(); } } finally @@ -213,7 +215,8 @@ namespace FreeSql if (curList.Any() == false) //全部删除 { - var delall = _db.Orm.Delete().AsType(tref.RefMiddleEntityType); + var delall = _db.Orm.Delete().AsType(tref.RefMiddleEntityType) + .WithTransaction(_uow?.GetOrBeginTransaction()); foreach (var midWhere in midWheres) delall.Where(midWhere); var sql = delall.ToSql(); await delall.ExecuteAffrowsAsync(); diff --git a/FreeSql.DbContext/DbSet/DbSetSync.cs b/FreeSql.DbContext/DbSet/DbSetSync.cs index 172d13cb..603e1fda 100644 --- a/FreeSql.DbContext/DbSet/DbSetSync.cs +++ b/FreeSql.DbContext/DbSet/DbSetSync.cs @@ -172,7 +172,9 @@ namespace FreeSql DbContextExecCommand(); //删除没有保存的数据 var propValEach = GetItemValue(item, prop) as IEnumerable; - _db.Orm.Delete().AsType(tref.RefEntityType).WhereDynamic(propValEach, true).ExecuteAffrows(); + _db.Orm.Delete().AsType(tref.RefEntityType) + .WithTransaction(_uow?.GetOrBeginTransaction()) + .WhereDynamic(propValEach, true).ExecuteAffrows(); } } finally @@ -225,7 +227,8 @@ namespace FreeSql if (curList.Any() == false) //全部删除 { - var delall = _db.Orm.Delete().AsType(tref.RefMiddleEntityType); + var delall = _db.Orm.Delete().AsType(tref.RefMiddleEntityType) + .WithTransaction(_uow?.GetOrBeginTransaction()); foreach (var midWhere in midWheres) delall.Where(midWhere); var sql = delall.ToSql(); delall.ExecuteAffrows(); diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index d9f91124..2735cefb 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -110,13 +110,6 @@ 清空状态数据 - - - 根据 lambda 条件删除数据 - - - - 添加 @@ -251,6 +244,13 @@ 实体对象 属性名 + + + 开启事务,或者返回已开启的事务 + + 若未开启事务,则开启 + + 是否启用工作单元 diff --git a/FreeSql.DbContext/UnitOfWork/IUnitOfWork.cs b/FreeSql.DbContext/UnitOfWork/IUnitOfWork.cs index 2dc2b691..e6ffb167 100644 --- a/FreeSql.DbContext/UnitOfWork/IUnitOfWork.cs +++ b/FreeSql.DbContext/UnitOfWork/IUnitOfWork.cs @@ -8,6 +8,11 @@ namespace FreeSql public interface IUnitOfWork : IDisposable { + /// + /// 开启事务,或者返回已开启的事务 + /// + /// 若未开启事务,则开启 + /// DbTransaction GetOrBeginTransaction(bool isCreate = true); IsolationLevel? IsolationLevel { get; set; } diff --git a/FreeSql.DbContext/UnitOfWork/UnitOfWork.cs b/FreeSql.DbContext/UnitOfWork/UnitOfWork.cs index a21bb5af..a05b8ba6 100644 --- a/FreeSql.DbContext/UnitOfWork/UnitOfWork.cs +++ b/FreeSql.DbContext/UnitOfWork/UnitOfWork.cs @@ -24,6 +24,8 @@ namespace FreeSql protected IFreeSql _fsql; protected Object _conn; protected DbTransaction _tran; + protected Aop.TraceBeforeEventArgs _tranBefore; + protected Aop.TraceBeforeEventArgs _uowBefore; /// /// 开启事务后有值,是 UnitOfWork 的唯一标识 @@ -35,6 +37,11 @@ namespace FreeSql public UnitOfWork(IFreeSql fsql) { _fsql = fsql; + if (_fsql == null) throw new ArgumentNullException(nameof(fsql)); + + _uowBefore = new Aop.TraceBeforeEventArgs("UnitOfWork", null); + _fsql?.Aop.TraceBeforeHandler?.Invoke(this, _uowBefore); + #if netcoreapp Current.Value = this; #endif @@ -77,49 +84,83 @@ namespace FreeSql if (!Enable) return null; if (_conn != null) _fsql.Ado.MasterPool.Return(_conn); - _conn = _fsql.Ado.MasterPool.Get(); + _tranBefore = new Aop.TraceBeforeEventArgs("BeginTransaction", IsolationLevel); + _fsql?.Aop.TraceBeforeHandler?.Invoke(this, _tranBefore); try { - _tran = IsolationLevel == null ? - _conn.Value.BeginTransaction() : - _conn.Value.BeginTransaction(IsolationLevel.Value); + _conn = _fsql.Ado.MasterPool.Get(); + try + { + _tran = IsolationLevel == null ? + _conn.Value.BeginTransaction() : + _conn.Value.BeginTransaction(IsolationLevel.Value); - this.Id = $"{DateTime.Now.ToString("yyyyMMdd_HHmmss")}_{Interlocked.Increment(ref _seed)}"; - DebugBeingUsed.TryAdd(this.Id, this); + this.Id = $"{DateTime.Now.ToString("yyyyMMdd_HHmmss")}_{Interlocked.Increment(ref _seed)}"; + DebugBeingUsed.TryAdd(this.Id, this); + } + catch + { + ReturnObject(); + throw; + } } - catch + catch (Exception ex) { - ReturnObject(); - throw; + _fsql?.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(_tranBefore, "失败", ex)); + throw ex; } return _tran; } public void Commit() { + var isCommited = false; try { if (_tran != null) { _tran.Commit(); + isCommited = true; + _fsql?.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(_tranBefore, "提交", null)); + if (EntityChangeReport != null && EntityChangeReport.OnChange != null && EntityChangeReport.Report.Any() == true) EntityChangeReport.OnChange.Invoke(EntityChangeReport.Report); } } + catch (Exception ex) + { + if (isCommited == false) + _fsql?.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(_tranBefore, "提交失败", ex)); + throw ex; + } finally { ReturnObject(); + _tranBefore = null; } } public void Rollback() { + var isRollbacked = false; try { - if (_tran != null) _tran.Rollback(); + if (_tran != null) + { + _tran.Rollback(); + isRollbacked = true; + _fsql?.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(_tranBefore, "回滚", null)); + } + } + catch (Exception ex) + { + if (isRollbacked == false) + _fsql?.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(_tranBefore, "回滚失败", ex)); + throw ex; } finally { ReturnObject(); + _tranBefore = null; } } @@ -137,6 +178,7 @@ namespace FreeSql } finally { + _fsql?.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(_uowBefore, "释放", null)); GC.SuppressFinalize(this); } } diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/UnitTest1.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/UnitTest1.cs index 4af3bc73..5f040d3c 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/UnitTest1.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/UnitTest1.cs @@ -485,7 +485,7 @@ WHERE ROWNUM < 11"; // .ExecuteAffrows(); - g.mysql.Aop.ParseExpression = (s, e) => + g.mysql.Aop.ParseExpression += (s, e) => { if (e.Expression.NodeType == ExpressionType.Call) { diff --git a/FreeSql.Tests/FreeSql.Tests/DataAnnotations/MySqlFluentTest.cs b/FreeSql.Tests/FreeSql.Tests/DataAnnotations/MySqlFluentTest.cs index c4110f04..5046db22 100644 --- a/FreeSql.Tests/FreeSql.Tests/DataAnnotations/MySqlFluentTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/DataAnnotations/MySqlFluentTest.cs @@ -37,7 +37,7 @@ namespace FreeSql.Tests.DataAnnotations { g.mysql.CodeFirst.ConfigEntity(a => a.Property(b => b.pkid).IsPrimary(true)); - g.mysql.Aop.ConfigEntity = (s, e) => + g.mysql.Aop.ConfigEntity += (s, e) => { var attr = e.EntityType.GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.Schema.TableAttribute), false).FirstOrDefault() as System.ComponentModel.DataAnnotations.Schema.TableAttribute; if (attr != null) @@ -45,7 +45,7 @@ namespace FreeSql.Tests.DataAnnotations e.ModifyResult.Name = attr.Name; } }; - g.mysql.Aop.ConfigEntityProperty = (s, e) => + g.mysql.Aop.ConfigEntityProperty += (s, e) => { if (e.Property.GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.KeyAttribute), false).Any()) { diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs index c952897c..37e30197 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs @@ -756,7 +756,7 @@ namespace FreeSql.Tests // .ExecuteAffrows(); - g.mysql.Aop.ParseExpression = (s, e) => + g.mysql.Aop.ParseExpression += (s, e) => { if (e.Expression.NodeType == ExpressionType.Call) { diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs index d97e28fc..1318b25a 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs @@ -459,7 +459,7 @@ namespace FreeSql.Tests a.SubjectId }).NoneParameter().ToSql(); - g.mysql.Aop.ParseExpression = (s, e) => + g.mysql.Aop.ParseExpression += (s, e) => { if (e.Expression.NodeType == ExpressionType.Call) { diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index 86365c2e..f8a2f9b7 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -34,7 +34,7 @@ - + net40 diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 5c768294..08d2c1b3 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -2098,16 +2098,6 @@ 从库连接池 - - - 监视数据库命令对象(执行前,调试) - - - - - 监视数据库命令对象(执行后,用于监视执行性能) - - 数据库类型 @@ -2401,46 +2391,66 @@ - + 可自定义解析表达式 - + 自定义实体的配置,方便和多个 ORM 共同使用 - + 自定义实体的属性配置,方便和多个 ORM 共同使用 - + 增删查改,执行命令之前触发 - + 增删查改,执行命令完成后触发 - + CodeFirst迁移,执行之前触发 - + CodeFirst迁移,执行完成触发 - + Insert/Update自动值处理 + + + 监视数据库命令对象(执行前,调试) + + + + + 监视数据库命令对象(执行后,用于监视执行性能) + + + + + 跟踪开始 + + + + + 跟踪结束 + + 内置解析功能,可辅助您进行解析 @@ -2586,6 +2596,56 @@ 获取实体的属性值,也可以设置实体的属性新值 + + + 标识符,可将 CommandBefore 与 CommandAfter 进行匹配 + + + + + 发生的错误 + + + + + 执行SQL命令,返回的结果 + + + + + 耗时(单位:Ticks) + + + + + 耗时(单位:毫秒) + + + + + 标识符,可将 TraceBeforeEventArgs 与 TraceAfterEventArgs 进行匹配 + + + + + 备注 + + + + + 发生的错误 + + + + + 耗时(单位:Ticks) + + + + + 耗时(单位:毫秒) + + 【开发环境必备】自动同步实体结构到数据库,程序运行中检查实体表是否存在,然后创建或修改 diff --git a/FreeSql/FreeSqlBuilder.cs b/FreeSql/FreeSqlBuilder.cs index 3f62e85a..9309609d 100644 --- a/FreeSql/FreeSqlBuilder.cs +++ b/FreeSql/FreeSqlBuilder.cs @@ -248,9 +248,15 @@ namespace FreeSql ret.CodeFirst.IsNoneCommandParameter = _isNoneCommandParameter; ret.CodeFirst.IsGenerateCommandParameterWithLambda = _isGenerateCommandParameterWithLambda; ret.CodeFirst.IsLazyLoading = _isLazyLoading; - var ado = ret.Ado as Internal.CommonProvider.AdoProvider; - ado.AopCommandExecuting += _aopCommandExecuting; - ado.AopCommandExecuted += _aopCommandExecuted; + + ret.Aop.CommandBefore += new EventHandler((s, e) => + { + _aopCommandExecuting(e.Command); + }); + ret.Aop.CommandAfter += new EventHandler((s, e) => + { + _aopCommandExecuted(e.Command, e.Log); + }); //添加实体属性名全局AOP转换处理 if (_entityPropertyConvertType != StringConvertType.None) diff --git a/FreeSql/Interface/IAdo.cs b/FreeSql/Interface/IAdo.cs index 7fccbfa2..3d7d60bc 100644 --- a/FreeSql/Interface/IAdo.cs +++ b/FreeSql/Interface/IAdo.cs @@ -20,14 +20,6 @@ namespace FreeSql /// List> SlavePools { get; } /// - /// 监视数据库命令对象(执行前,调试) - /// - Action AopCommandExecuting { get; set; } - /// - /// 监视数据库命令对象(执行后,用于监视执行性能) - /// - Action AopCommandExecuted { get; set; } - /// /// 数据库类型 /// DataType DataType { get; } diff --git a/FreeSql/Interface/IAop.cs b/FreeSql/Interface/IAop.cs index 9aeefb8d..b9914ff3 100644 --- a/FreeSql/Interface/IAop.cs +++ b/FreeSql/Interface/IAop.cs @@ -15,44 +15,75 @@ namespace FreeSql /// /// 可自定义解析表达式 /// - EventHandler ParseExpression { get; set; } + event EventHandler ParseExpression; + EventHandler ParseExpressionHandler { get; } /// /// 自定义实体的配置,方便和多个 ORM 共同使用 /// - EventHandler ConfigEntity { get; set; } + event EventHandler ConfigEntity; + EventHandler ConfigEntityHandler { get; } /// /// 自定义实体的属性配置,方便和多个 ORM 共同使用 /// - EventHandler ConfigEntityProperty { get; set; } + event EventHandler ConfigEntityProperty; + EventHandler ConfigEntityPropertyHandler { get; } /// /// 增删查改,执行命令之前触发 /// - EventHandler CurdBefore { get; set; } + event EventHandler CurdBefore; + EventHandler CurdBeforeHandler { get; } /// /// 增删查改,执行命令完成后触发 /// - EventHandler CurdAfter { get; set; } + event EventHandler CurdAfter; + EventHandler CurdAfterHandler { get; } /// /// CodeFirst迁移,执行之前触发 /// - EventHandler SyncStructureBefore { get; set; } + event EventHandler SyncStructureBefore; + EventHandler SyncStructureBeforeHandler { get; } /// /// CodeFirst迁移,执行完成触发 /// - EventHandler SyncStructureAfter { get; set; } + event EventHandler SyncStructureAfter; + EventHandler SyncStructureAfterHandler { get; } /// /// Insert/Update自动值处理 /// - EventHandler AuditValue { get; set; } + event EventHandler AuditValue; + EventHandler AuditValueHandler { get; } + + /// + /// 监视数据库命令对象(执行前,调试) + /// + event EventHandler CommandBefore; + EventHandler CommandBeforeHandler { get; } + /// + /// 监视数据库命令对象(执行后,用于监视执行性能) + /// + event EventHandler CommandAfter; + EventHandler CommandAfterHandler { get; } + + /// + /// 跟踪开始 + /// + event EventHandler TraceBefore; + EventHandler TraceBeforeHandler { get; } + /// + /// 跟踪结束 + /// + event EventHandler TraceAfter; + EventHandler TraceAfterHandler { get; } } } namespace FreeSql.Aop { + #region ParseExpression public class ParseExpressionEventArgs : EventArgs { public ParseExpressionEventArgs(Expression expression, Func freeParse) @@ -75,6 +106,9 @@ namespace FreeSql.Aop /// public string Result { get; set; } } + #endregion + + #region ConfigEntity/Property public class ConfigEntityEventArgs : EventArgs { public ConfigEntityEventArgs(Type entityType) @@ -119,7 +153,9 @@ namespace FreeSql.Aop /// public ColumnAttribute ModifyResult { get; } } + #endregion + #region CurdBefore/After public class CurdBeforeEventArgs : EventArgs { public CurdBeforeEventArgs(Type entityType, TableInfo table, CurdType curdType, string sql, DbParameter[] dbParms) : @@ -155,7 +191,7 @@ namespace FreeSql.Aop /// /// 实体类型的元数据 /// - public TableInfo Table { get; set; } + public TableInfo Table { get; } /// /// 执行的 SQL /// @@ -183,7 +219,7 @@ namespace FreeSql.Aop /// /// 执行SQL命令,返回的结果 /// - public object ExecuteResult { get; set; } + public object ExecuteResult { get; } /// /// 耗时(单位:Ticks) /// @@ -193,7 +229,9 @@ namespace FreeSql.Aop /// public long ElapsedMilliseconds => this.Stopwatch.ElapsedMilliseconds; } + #endregion + #region SyncStructureBefore/After public class SyncStructureBeforeEventArgs : EventArgs { public SyncStructureBeforeEventArgs(Type[] entityTypes) : @@ -246,7 +284,9 @@ namespace FreeSql.Aop /// public long ElapsedMilliseconds => this.Stopwatch.ElapsedMilliseconds; } + #endregion + #region AuditValue public class AuditValueEventArgs : EventArgs { public AuditValueEventArgs(AuditValueType autoValueType, ColumnInfo column, PropertyInfo property, object value) @@ -285,4 +325,111 @@ namespace FreeSql.Aop public bool IsChanged { get; private set; } } public enum AuditValueType { Update, Insert } + #endregion + + #region CommandBefore/After + public class CommandBeforeEventArgs : EventArgs + { + public CommandBeforeEventArgs(DbCommand command) : + this(Guid.NewGuid(), new Stopwatch(), command) + { + this.Stopwatch.Start(); + } + protected CommandBeforeEventArgs(Guid identifier, Stopwatch stopwatch, DbCommand command) + { + this.Identifier = identifier; + this.Stopwatch = stopwatch; + this.Command = command; + } + + /// + /// 标识符,可将 CommandBefore 与 CommandAfter 进行匹配 + /// + public Guid Identifier { get; protected set; } + protected Stopwatch Stopwatch { get; } + internal Stopwatch StopwatchInternal => Stopwatch; + public DbCommand Command { get; } + } + public class CommandAfterEventArgs : CommandBeforeEventArgs + { + public CommandAfterEventArgs(CommandBeforeEventArgs before, Exception exception, string log) : + base(before.Identifier, before.StopwatchInternal, before.Command) + { + this.Exception = exception; + this.Log = log; + this.Stopwatch.Stop(); + } + + /// + /// 发生的错误 + /// + public Exception Exception { get; } + /// + /// 执行SQL命令,返回的结果 + /// + public string Log { get; } + /// + /// 耗时(单位:Ticks) + /// + public long ElapsedTicks => this.Stopwatch.ElapsedTicks; + /// + /// 耗时(单位:毫秒) + /// + public long ElapsedMilliseconds => this.Stopwatch.ElapsedMilliseconds; + } + #endregion + + #region TraceBefore/After + public class TraceBeforeEventArgs : EventArgs + { + public TraceBeforeEventArgs(string operation, object value) : + this(Guid.NewGuid(), new Stopwatch(), operation, value) + { + this.Stopwatch.Start(); + } + protected TraceBeforeEventArgs(Guid identifier, Stopwatch stopwatch, string operation, object value) + { + this.Identifier = identifier; + this.Stopwatch = stopwatch; + this.Operation = operation; + this.Value = value; + } + + /// + /// 标识符,可将 TraceBeforeEventArgs 与 TraceAfterEventArgs 进行匹配 + /// + public Guid Identifier { get; protected set; } + protected Stopwatch Stopwatch { get; } + internal Stopwatch StopwatchInternal => Stopwatch; + public string Operation { get; } + public object Value { get; } + } + public class TraceAfterEventArgs : TraceBeforeEventArgs + { + public TraceAfterEventArgs(TraceBeforeEventArgs before, string remark, Exception exception) : + base(before.Identifier, before.StopwatchInternal, before.Operation, before.Value) + { + this.Remark = remark; + this.Exception = exception; + this.Stopwatch.Stop(); + } + + /// + /// 备注 + /// + public string Remark { get; } + /// + /// 发生的错误 + /// + public Exception Exception { get; } + /// + /// 耗时(单位:Ticks) + /// + public long ElapsedTicks => this.Stopwatch.ElapsedTicks; + /// + /// 耗时(单位:毫秒) + /// + public long ElapsedMilliseconds => this.Stopwatch.ElapsedMilliseconds; + } + #endregion } \ No newline at end of file diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 3dc16e12..6a121cdb 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -486,7 +486,9 @@ namespace FreeSql.Internal if (isLeftMapType) oldMapType = tsc.SetMapTypeReturnOld(leftMapColumn.Attribute.MapType); var right = ExpressionLambdaToSql(rightExp, tsc); - if (right != "NULL" && isLeftMapType) + if (right != "NULL" && isLeftMapType && + //判断参数化后的bug + !(right.Contains('@') || right.Contains('?') || right.Contains(':'))) { var enumType = leftMapColumn.CsType.NullableTypeOrThis(); if (enumType.IsEnum) @@ -500,7 +502,9 @@ namespace FreeSql.Internal { oldMapType = tsc.SetMapTypeReturnOld(rightMapColumn.Attribute.MapType); left = ExpressionLambdaToSql(leftExp, tsc); - if (left != "NULL" && isRightMapType) + if (left != "NULL" && isRightMapType && + //判断参数化后的bug + !(left.Contains('@') || left.Contains('?') || left.Contains(':'))) { var enumType = rightMapColumn.CsType.NullableTypeOrThis(); if (enumType.IsEnum) @@ -560,10 +564,10 @@ namespace FreeSql.Internal { if (exp == null) return ""; if (tsc.dbParams != null && tsc.mapColumnTmp != null && tsc.mapColumnTmp.CsType.NullableTypeOrThis() != exp.Type) tsc.SetMapColumnTmp(null); - if (tsc.isDisableDiyParse == false && _common._orm.Aop.ParseExpression != null) + if (tsc.isDisableDiyParse == false && _common._orm.Aop.ParseExpressionHandler != null) { var args = new Aop.ParseExpressionEventArgs(exp, ukexp => ExpressionLambdaToSql(ukexp, tsc.CloneDisableDiyParse())); - _common._orm.Aop.ParseExpression?.Invoke(this, args); + _common._orm.Aop.ParseExpressionHandler?.Invoke(this, args); if (string.IsNullOrEmpty(args.Result) == false) return args.Result; } switch (exp.NodeType) diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs index 11299db6..86f0bb2e 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs @@ -17,10 +17,8 @@ namespace FreeSql.Internal.CommonProvider protected abstract void ReturnConnection(IObjectPool pool, Object conn, Exception ex); protected abstract DbCommand CreateCommand(); protected abstract DbParameter[] GetDbParamtersByObject(string sql, object obj); - public Action AopCommandExecuting { get; set; } - public Action AopCommandExecuted { get; set; } - protected bool IsTracePerformance => AopCommandExecuted != null; + protected bool IsTracePerformance => _util?._orm?.Aop.CommandAfterHandler != null; public IObjectPool MasterPool { get; protected set; } public List> SlavePools { get; } = new List>(); @@ -35,22 +33,22 @@ namespace FreeSql.Internal.CommonProvider this.DataType = dataType; } - void LoggerException(IObjectPool pool, (DbCommand cmd, bool isclose) pc, Exception e, DateTime dt, StringBuilder logtxt, bool isThrowException = true) + void LoggerException(IObjectPool pool, (Aop.CommandBeforeEventArgs before, DbCommand cmd, bool isclose) pc, Exception ex, DateTime dt, StringBuilder logtxt, bool isThrowException = true) { var cmd = pc.cmd; if (pc.isclose) pc.cmd.Connection.Close(); if (IsTracePerformance) { TimeSpan ts = DateTime.Now.Subtract(dt); - if (e == null && ts.TotalMilliseconds > 100) + if (ex == null && ts.TotalMilliseconds > 100) Trace.WriteLine(logtxt.Insert(0, $"{pool?.Policy.Name}(执行SQL)语句耗时过长{ts.TotalMilliseconds}ms\r\n{cmd.CommandText}\r\n").ToString()); else logtxt.Insert(0, $"{pool?.Policy.Name}(执行SQL)耗时{ts.TotalMilliseconds}ms\r\n{cmd.CommandText}\r\n").ToString(); } - if (e == null) + if (ex == null) { - AopCommandExecuted?.Invoke(cmd, logtxt.ToString()); + _util?._orm?.Aop.CommandAfterHandler?.Invoke(_util._orm, new Aop.CommandAfterEventArgs(pc.before, null, logtxt.ToString())); return; } @@ -59,7 +57,7 @@ namespace FreeSql.Internal.CommonProvider foreach (DbParameter parm in cmd.Parameters) log.Append(parm.ParameterName.PadRight(20, ' ')).Append(" = ").Append((parm.Value ?? DBNull.Value) == DBNull.Value ? "NULL" : parm.Value).Append("\r\n"); - log.Append(e.Message); + log.Append(ex.Message); Trace.WriteLine(log.ToString()); if (cmd.Transaction != null) @@ -70,16 +68,16 @@ namespace FreeSql.Internal.CommonProvider //cmd.Transaction.Rollback(); } else - RollbackTransaction(); + RollbackTransaction(ex); } - AopCommandExecuted?.Invoke(cmd, log.ToString()); + _util?._orm?.Aop.CommandAfterHandler?.Invoke(_util._orm, new Aop.CommandAfterEventArgs(pc.before, null, logtxt.ToString())); cmd.Parameters.Clear(); if (isThrowException) { if (DataType == DataType.Sqlite) cmd.Dispose(); - throw e; + throw ex; } } @@ -547,11 +545,14 @@ namespace FreeSql.Internal.CommonProvider Object conn = null; var pc = PrepareCommand(connection, transaction, cmdType, cmdText, cmdParms, logtxt); - if (IsTracePerformance) logtxt.Append("PrepareCommand: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); + if (IsTracePerformance) + { + logtxt.Append("PrepareCommand: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); + logtxt_dt = DateTime.Now; + } Exception ex = null; try { - if (IsTracePerformance) logtxt_dt = DateTime.Now; if (isSlave) { //从库查询切换,恢复 @@ -571,7 +572,7 @@ namespace FreeSql.Internal.CommonProvider { if (IsTracePerformance) logtxt_dt = DateTime.Now; ReturnConnection(pool, conn, ex); //pool.Return(conn, ex); - if (IsTracePerformance) logtxt.Append("ReleaseConnection: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms"); + if (IsTracePerformance) logtxt.Append("Pool.Return: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms"); } LoggerException(pool, pc, new Exception($"连接失败,准备切换其他可用服务器"), dt, logtxt, false); pc.cmd.Parameters.Clear(); @@ -587,43 +588,31 @@ namespace FreeSql.Internal.CommonProvider } if (IsTracePerformance) { - logtxt.Append("Open: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); + logtxt.Append("Pool.Get: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); logtxt_dt = DateTime.Now; } using (var dr = pc.cmd.ExecuteReader()) { - if (IsTracePerformance) logtxt.Append("ExecuteReader: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); int resultIndex = 0; while (true) { while (true) { - if (IsTracePerformance) logtxt_dt = DateTime.Now; bool isread = dr.Read(); - if (IsTracePerformance) logtxt.Append(" dr.Read: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); if (isread == false) break; if (readerHander != null) - { - object[] values = null; - if (IsTracePerformance) - { - logtxt_dt = DateTime.Now; - values = new object[dr.FieldCount]; - dr.GetValues(values); - logtxt.Append(" dr.GetValues: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); - logtxt_dt = DateTime.Now; - } readerHander(dr, resultIndex); - if (IsTracePerformance) logtxt.Append(" readerHander: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms (").Append(string.Join(", ", values)).Append(")\r\n"); - } } if (++resultIndex >= multipleResult || dr.NextResult() == false) break; } - if (IsTracePerformance) logtxt_dt = DateTime.Now; dr.Close(); } - if (IsTracePerformance) logtxt.Append("ExecuteReader_dispose: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); + if (IsTracePerformance) + { + logtxt.Append("ExecuteReader: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); + logtxt_dt = DateTime.Now; + } } catch (Exception ex2) { @@ -632,9 +621,12 @@ namespace FreeSql.Internal.CommonProvider if (conn != null) { - if (IsTracePerformance) logtxt_dt = DateTime.Now; ReturnConnection(pool, conn, ex); //pool.Return(conn, ex); - if (IsTracePerformance) logtxt.Append("ReleaseConnection: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms"); + if (IsTracePerformance) + { + logtxt.Append("Pool.Return: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms"); + logtxt_dt = DateTime.Now; + } } LoggerException(pool, pc, ex, dt, logtxt); pc.cmd.Parameters.Clear(); @@ -735,7 +727,7 @@ namespace FreeSql.Internal.CommonProvider { if (IsTracePerformance) logtxt_dt = DateTime.Now; ReturnConnection(MasterPool, conn, ex); //this.MasterPool.Return(conn, ex); - if (IsTracePerformance) logtxt.Append("ReleaseConnection: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms"); + if (IsTracePerformance) logtxt.Append("Pool.Return: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms"); } LoggerException(this.MasterPool, pc, ex, dt, logtxt); pc.cmd.Parameters.Clear(); @@ -771,7 +763,7 @@ namespace FreeSql.Internal.CommonProvider { if (IsTracePerformance) logtxt_dt = DateTime.Now; ReturnConnection(MasterPool, conn, ex); //this.MasterPool.Return(conn, ex); - if (IsTracePerformance) logtxt.Append("ReleaseConnection: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms"); + if (IsTracePerformance) logtxt.Append("Pool.Return: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms"); } LoggerException(this.MasterPool, pc, ex, dt, logtxt); pc.cmd.Parameters.Clear(); @@ -779,7 +771,7 @@ namespace FreeSql.Internal.CommonProvider return val; } - (DbCommand cmd, bool isclose) PrepareCommand(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, DbParameter[] cmdParms, StringBuilder logtxt) + (Aop.CommandBeforeEventArgs before, DbCommand cmd, bool isclose) PrepareCommand(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, DbParameter[] cmdParms, StringBuilder logtxt) { var dt = DateTime.Now; DbCommand cmd = CreateCommand(); @@ -800,14 +792,10 @@ namespace FreeSql.Internal.CommonProvider if (connection == null) { var tran = transaction ?? TransactionCurrentThread; - if (IsTracePerformance) logtxt.Append(" PrepareCommand_part1: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms cmdParms: ").Append(cmd.Parameters.Count).Append("\r\n"); - if (tran != null && connection == null) { - if (IsTracePerformance) dt = DateTime.Now; cmd.Connection = tran.Connection; cmd.Transaction = tran; - if (IsTracePerformance) logtxt.Append(" PrepareCommand_tran!=null: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); } } else @@ -825,11 +813,12 @@ namespace FreeSql.Internal.CommonProvider } if (IsTracePerformance) dt = DateTime.Now; - AutoCommitTransaction(); - if (IsTracePerformance) logtxt.Append(" AutoCommitTransaction: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); + CommitTimeoutTransaction(); + if (IsTracePerformance) logtxt.Append(" CommitTimeoutTransaction: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); - AopCommandExecuting?.Invoke(cmd); - return (cmd, isclose); + var before = new Aop.CommandBeforeEventArgs(cmd); + _util?._orm?.Aop.CommandBeforeHandler?.Invoke(_util._orm, before); + return (before, cmd, isclose); } } } diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs index 694ac18c..cc93f542 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs @@ -476,11 +476,14 @@ namespace FreeSql.Internal.CommonProvider Object conn = null; var pc = await PrepareCommandAsync(connection, transaction, cmdType, cmdText, cmdParms, logtxt); - if (IsTracePerformance) logtxt.Append("PrepareCommandAsync: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); + if (IsTracePerformance) + { + logtxt.Append("PrepareCommand: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); + logtxt_dt = DateTime.Now; + } Exception ex = null; try { - if (IsTracePerformance) logtxt_dt = DateTime.Now; if (isSlave) { //从库查询切换,恢复 @@ -500,7 +503,7 @@ namespace FreeSql.Internal.CommonProvider { if (IsTracePerformance) logtxt_dt = DateTime.Now; ReturnConnection(pool, conn, ex); //pool.Return(conn, ex); - if (IsTracePerformance) logtxt.Append("ReleaseConnection: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms"); + if (IsTracePerformance) logtxt.Append("Pool.Return: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms"); } LoggerException(pool, pc, new Exception($"连接失败,准备切换其他可用服务器"), dt, logtxt, false); pc.cmd.Parameters.Clear(); @@ -516,43 +519,31 @@ namespace FreeSql.Internal.CommonProvider } if (IsTracePerformance) { - logtxt.Append("OpenAsync: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); + logtxt.Append("Pool.Get: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); logtxt_dt = DateTime.Now; } using (var dr = await pc.cmd.ExecuteReaderAsync()) { - if (IsTracePerformance) logtxt.Append("ExecuteReaderAsync: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); int resultIndex = 0; while (true) { while (true) { - if (IsTracePerformance) logtxt_dt = DateTime.Now; bool isread = await dr.ReadAsync(); - if (IsTracePerformance) logtxt.Append(" dr.ReadAsync: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); if (isread == false) break; if (readerHander != null) - { - object[] values = null; - if (IsTracePerformance) - { - logtxt_dt = DateTime.Now; - values = new object[dr.FieldCount]; - for (int a = 0; a < values.Length; a++) if (!await dr.IsDBNullAsync(a)) values[a] = await dr.GetFieldValueAsync(a); - logtxt.Append(" dr.GetValues: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); - logtxt_dt = DateTime.Now; - } await readerHander(dr, resultIndex); - if (IsTracePerformance) logtxt.Append(" readerHanderAsync: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms (").Append(string.Join(", ", values)).Append(")\r\n"); - } } if (++resultIndex >= multipleResult || dr.NextResult() == false) break; } - if (IsTracePerformance) logtxt_dt = DateTime.Now; dr.Close(); } - if (IsTracePerformance) logtxt.Append("ExecuteReaderAsync_dispose: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); + if (IsTracePerformance) + { + logtxt.Append("ExecuteReader: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); + logtxt_dt = DateTime.Now; + } } catch (Exception ex2) { @@ -563,7 +554,7 @@ namespace FreeSql.Internal.CommonProvider { if (IsTracePerformance) logtxt_dt = DateTime.Now; ReturnConnection(pool, conn, ex); //pool.Return(conn, ex); - if (IsTracePerformance) logtxt.Append("ReleaseConnection: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms"); + if (IsTracePerformance) logtxt.Append("Pool.Return: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms"); } LoggerException(pool, pc, ex, dt, logtxt); pc.cmd.Parameters.Clear(); @@ -665,7 +656,7 @@ namespace FreeSql.Internal.CommonProvider { if (IsTracePerformance) logtxt_dt = DateTime.Now; ReturnConnection(MasterPool, conn, ex); //this.MasterPool.Return(conn, ex); - if (IsTracePerformance) logtxt.Append("ReleaseConnection: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms"); + if (IsTracePerformance) logtxt.Append("Pool.Return: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms"); } LoggerException(this.MasterPool, pc, ex, dt, logtxt); pc.cmd.Parameters.Clear(); @@ -701,7 +692,7 @@ namespace FreeSql.Internal.CommonProvider { if (IsTracePerformance) logtxt_dt = DateTime.Now; ReturnConnection(MasterPool, conn, ex); //this.MasterPool.Return(conn, ex); - if (IsTracePerformance) logtxt.Append("ReleaseConnection: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms"); + if (IsTracePerformance) logtxt.Append("Pool.Return: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms"); } LoggerException(this.MasterPool, pc, ex, dt, logtxt); pc.cmd.Parameters.Clear(); @@ -709,7 +700,7 @@ namespace FreeSql.Internal.CommonProvider return val; } - async Task<(DbCommand cmd, bool isclose)> PrepareCommandAsync(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, DbParameter[] cmdParms, StringBuilder logtxt) + async Task<(Aop.CommandBeforeEventArgs before, DbCommand cmd, bool isclose)> PrepareCommandAsync(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, DbParameter[] cmdParms, StringBuilder logtxt) { DateTime dt = DateTime.Now; DbCommand cmd = CreateCommand(); @@ -733,10 +724,8 @@ namespace FreeSql.Internal.CommonProvider if (tran != null) { - if (IsTracePerformance) dt = DateTime.Now; cmd.Connection = tran.Connection; cmd.Transaction = tran; - if (IsTracePerformance) logtxt.Append(" PrepareCommandAsync_tran!=null: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); } } else @@ -745,7 +734,7 @@ namespace FreeSql.Internal.CommonProvider { if (IsTracePerformance) dt = DateTime.Now; await connection.OpenAsync(); - if (IsTracePerformance) logtxt.Append(" PrepareCommand_ConnectionOpenAsync: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); + if (IsTracePerformance) logtxt.Append(" PrepareCommand_ConnectionOpen: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms\r\n"); isclose = true; } cmd.Connection = connection; @@ -753,10 +742,9 @@ namespace FreeSql.Internal.CommonProvider cmd.Transaction = transaction; } - if (IsTracePerformance) logtxt.Append(" PrepareCommandAsync ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms cmdParms: ").Append(cmd.Parameters.Count).Append("\r\n"); - - AopCommandExecuting?.Invoke(cmd); - return (cmd, isclose); + var before = new Aop.CommandBeforeEventArgs(cmd); + _util?._orm?.Aop.CommandBeforeHandler?.Invoke(_util._orm, before); + return (before, cmd, isclose); } } } diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs index df0b0741..60133ed4 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs @@ -15,6 +15,7 @@ namespace FreeSql.Internal.CommonProvider class Transaction2 { + internal Aop.TraceBeforeEventArgs AopBefore; internal Object Conn; internal DbTransaction Transaction; internal DateTime RunTime; @@ -33,6 +34,7 @@ namespace FreeSql.Internal.CommonProvider private object _trans_lock = new object(); public DbTransaction TransactionCurrentThread => _trans.TryGetValue(Thread.CurrentThread.ManagedThreadId, out var conn) && conn.Transaction?.Connection != null ? conn.Transaction : null; + public Aop.TraceBeforeEventArgs TransactionCurrentThreadAopBefore => _trans.TryGetValue(Thread.CurrentThread.ManagedThreadId, out var conn) && conn.Transaction?.Connection != null ? conn.AopBefore : null; public void BeginTransaction(TimeSpan timeout, IsolationLevel? isolationLevel) { @@ -41,16 +43,21 @@ namespace FreeSql.Internal.CommonProvider int tid = Thread.CurrentThread.ManagedThreadId; Transaction2 tran = null; Object conn = null; + var before = new Aop.TraceBeforeEventArgs("ThreadTransaction", isolationLevel); + _util?._orm?.Aop.TraceBeforeHandler?.Invoke(this, before); try { conn = MasterPool.Get(); tran = new Transaction2(conn, isolationLevel == null ? conn.Value.BeginTransaction() : conn.Value.BeginTransaction(isolationLevel.Value), timeout); + tran.AopBefore = before; } catch (Exception ex) { Trace.WriteLine($"数据库出错(开启事务){ex.Message} \r\n{ex.StackTrace}"); MasterPool.Return(conn); + var after = new Aop.TraceAfterEventArgs(before, "", ex); + _util?._orm?.Aop.TraceAfterHandler?.Invoke(this, after); throw ex; } if (_trans.ContainsKey(tid)) CommitTransaction(); @@ -59,17 +66,17 @@ namespace FreeSql.Internal.CommonProvider _trans.TryAdd(tid, tran); } - private void AutoCommitTransaction() + private void CommitTimeoutTransaction() { if (_trans.Count > 0) { Transaction2[] trans = null; lock (_trans_lock) trans = _trans.Values.Where(st2 => DateTime.Now.Subtract(st2.RunTime) > st2.Timeout).ToArray(); - foreach (Transaction2 tran in trans) CommitTransaction(true, tran); + foreach (Transaction2 tran in trans) CommitTransaction(true, tran, null, "Timeout自动提交"); } } - private void CommitTransaction(bool isCommit, Transaction2 tran) + private void CommitTransaction(bool isCommit, Transaction2 tran, Exception rollbackException, string remark = null) { if (tran == null || tran.Transaction == null || tran.Transaction.Connection == null) return; @@ -79,29 +86,34 @@ namespace FreeSql.Internal.CommonProvider _trans.TryRemove(tran.Conn.LastGetThreadId, out var oldtran); Exception ex = null; - var f001 = isCommit ? "提交" : "回滚"; + if (string.IsNullOrEmpty(remark)) remark = isCommit ? "提交" : "回滚"; try { - Trace.WriteLine($"线程{tran.Conn.LastGetThreadId}事务{f001}"); + Trace.WriteLine($"线程{tran.Conn.LastGetThreadId}事务{remark}"); if (isCommit) tran.Transaction.Commit(); else tran.Transaction.Rollback(); } catch (Exception ex2) { ex = ex2; - Trace.WriteLine($"数据库出错({f001}事务):{ex.Message} {ex.StackTrace}"); + Trace.WriteLine($"数据库出错({remark}事务):{ex.Message} {ex.StackTrace}"); } finally { ReturnConnection(MasterPool, tran.Conn, ex); //MasterPool.Return(tran.Conn, ex); + + var after = new Aop.TraceAfterEventArgs(tran.AopBefore, remark, ex ?? rollbackException); + _util?._orm?.Aop.TraceAfterHandler?.Invoke(this, after); } } - private void CommitTransaction(bool isCommit) + public void CommitTransaction() { - if (_trans.TryGetValue(Thread.CurrentThread.ManagedThreadId, out var tran)) CommitTransaction(isCommit, tran); + if (_trans.TryGetValue(Thread.CurrentThread.ManagedThreadId, out var tran)) CommitTransaction(true, tran, null); + } + public void RollbackTransaction(Exception ex) + { + if (_trans.TryGetValue(Thread.CurrentThread.ManagedThreadId, out var tran)) CommitTransaction(false, tran, ex); } - public void CommitTransaction() => CommitTransaction(true); - public void RollbackTransaction() => CommitTransaction(false); public void Transaction(Action handler) => TransactionInternal(null, TimeSpan.FromSeconds(60), handler); public void Transaction(TimeSpan timeout, Action handler) => TransactionInternal(null, timeout, handler); @@ -117,7 +129,7 @@ namespace FreeSql.Internal.CommonProvider } catch (Exception ex) { - RollbackTransaction(); + RollbackTransaction(ex); throw ex; } } @@ -132,7 +144,7 @@ namespace FreeSql.Internal.CommonProvider Transaction2[] trans = null; lock (_trans_lock) trans = _trans.Values.ToArray(); - foreach (Transaction2 tran in trans) CommitTransaction(false, tran); + foreach (Transaction2 tran in trans) CommitTransaction(false, tran, null, "Dispose自动提交"); } catch { } diff --git a/FreeSql/Internal/CommonProvider/AopProvider.cs b/FreeSql/Internal/CommonProvider/AopProvider.cs index 168a0dcf..1f426e04 100644 --- a/FreeSql/Internal/CommonProvider/AopProvider.cs +++ b/FreeSql/Internal/CommonProvider/AopProvider.cs @@ -8,13 +8,38 @@ namespace FreeSql.Internal.CommonProvider { public class AopProvider : IAop { - public EventHandler ParseExpression { get; set; } - public EventHandler ConfigEntity { get; set; } - public EventHandler ConfigEntityProperty { get; set; } - public EventHandler CurdBefore { get; set; } - public EventHandler CurdAfter { get; set; } - public EventHandler SyncStructureBefore { get; set; } - public EventHandler SyncStructureAfter { get; set; } - public EventHandler AuditValue { get; set; } + public event EventHandler ParseExpression; + public event EventHandler ConfigEntity; + public event EventHandler ConfigEntityProperty; + + public event EventHandler CurdBefore; + public event EventHandler CurdAfter; + public event EventHandler SyncStructureBefore; + public event EventHandler SyncStructureAfter; + + public event EventHandler AuditValue; + + public event EventHandler CommandBefore; + public event EventHandler CommandAfter; + public event EventHandler TraceBefore; + public event EventHandler TraceAfter; + + //------------- Handler + + public EventHandler ParseExpressionHandler => ParseExpression; + public EventHandler ConfigEntityHandler => ConfigEntity; + public EventHandler ConfigEntityPropertyHandler => ConfigEntityProperty; + + public EventHandler CurdBeforeHandler => CurdBefore; + public EventHandler CurdAfterHandler => CurdAfter; + public EventHandler SyncStructureBeforeHandler => SyncStructureBefore; + public EventHandler SyncStructureAfterHandler => SyncStructureAfter; + + public EventHandler AuditValueHandler => AuditValue; + + public EventHandler CommandBeforeHandler => CommandBefore; + public EventHandler CommandAfterHandler => CommandAfter; + public EventHandler TraceBeforeHandler => TraceBefore; + public EventHandler TraceAfterHandler => TraceAfter; } } diff --git a/FreeSql/Internal/CommonProvider/CodeFirstProvider.cs b/FreeSql/Internal/CommonProvider/CodeFirstProvider.cs index cf1cf470..83cdd9e6 100644 --- a/FreeSql/Internal/CommonProvider/CodeFirstProvider.cs +++ b/FreeSql/Internal/CommonProvider/CodeFirstProvider.cs @@ -84,7 +84,7 @@ namespace FreeSql.Internal.CommonProvider .Select(a => (a.entityType, GetTableNameLowerOrUpper(a.tableName))).ToArray(); if (syncObjects.Any() == false) return false; var before = new Aop.SyncStructureBeforeEventArgs(syncObjects.Select(a => a.entityType).ToArray()); - _orm.Aop.SyncStructureBefore?.Invoke(this, before); + _orm.Aop.SyncStructureBeforeHandler?.Invoke(this, before); Exception exception = null; string ddl = null; try @@ -110,7 +110,7 @@ namespace FreeSql.Internal.CommonProvider finally { var after = new Aop.SyncStructureAfterEventArgs(before, ddl, exception); - _orm.Aop.SyncStructureAfter?.Invoke(this, after); + _orm.Aop.SyncStructureAfterHandler?.Invoke(this, after); } } diff --git a/FreeSql/Internal/CommonProvider/DeleteProvider.cs b/FreeSql/Internal/CommonProvider/DeleteProvider.cs index bacd113f..516b75f0 100644 --- a/FreeSql/Internal/CommonProvider/DeleteProvider.cs +++ b/FreeSql/Internal/CommonProvider/DeleteProvider.cs @@ -63,7 +63,7 @@ namespace FreeSql.Internal.CommonProvider if (string.IsNullOrEmpty(sql)) return 0; var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var affrows = 0; Exception exception = null; try @@ -78,7 +78,7 @@ namespace FreeSql.Internal.CommonProvider finally { var after = new Aop.CurdAfterEventArgs(before, exception, affrows); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } this.ClearData(); return affrows; diff --git a/FreeSql/Internal/CommonProvider/DeleteProviderAsync.cs b/FreeSql/Internal/CommonProvider/DeleteProviderAsync.cs index 9860c999..45afc9d5 100644 --- a/FreeSql/Internal/CommonProvider/DeleteProviderAsync.cs +++ b/FreeSql/Internal/CommonProvider/DeleteProviderAsync.cs @@ -19,7 +19,7 @@ namespace FreeSql.Internal.CommonProvider if (string.IsNullOrEmpty(sql)) return 0; var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var affrows = 0; Exception exception = null; try @@ -34,7 +34,7 @@ namespace FreeSql.Internal.CommonProvider finally { var after = new Aop.CurdAfterEventArgs(before, exception, affrows); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } this.ClearData(); return affrows; diff --git a/FreeSql/Internal/CommonProvider/InsertProvider.cs b/FreeSql/Internal/CommonProvider/InsertProvider.cs index 34bbeb15..794bd98e 100644 --- a/FreeSql/Internal/CommonProvider/InsertProvider.cs +++ b/FreeSql/Internal/CommonProvider/InsertProvider.cs @@ -121,7 +121,7 @@ namespace FreeSql.Internal.CommonProvider source = source.Where(a => a != null).ToList(); AuditDataValue(this, source, _orm, _table, _auditValueChangedDict); _source.AddRange(source); - + } return this; } @@ -151,10 +151,10 @@ namespace FreeSql.Internal.CommonProvider } } } - if (orm.Aop.AuditValue != null) + if (orm.Aop.AuditValueHandler != null) { var auditArgs = new Aop.AuditValueEventArgs(Aop.AuditValueType.Insert, col, table.Properties[col.CsName], val); - orm.Aop.AuditValue(sender, auditArgs); + orm.Aop.AuditValueHandler(sender, auditArgs); if (auditArgs.IsChanged) { col.SetMapValue(data, val = auditArgs.Value); @@ -208,35 +208,55 @@ namespace FreeSql.Internal.CommonProvider if (_transaction == null) this.WithTransaction(_orm.Ado.TransactionCurrentThread); - if (_transaction != null || _batchAutoTransaction == false) + var before = new Aop.TraceBeforeEventArgs("SplitExecuteAffrows", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, before); + Exception exception = null; + try { - for (var a = 0; a < ss.Length; a++) + if (_transaction != null || _batchAutoTransaction == false) { - _source = ss[a]; - ret += this.RawExecuteAffrows(); + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + ret += this.RawExecuteAffrows(); + } + } + else + { + using (var conn = _orm.Ado.MasterPool.Get()) + { + _transaction = conn.Value.BeginTransaction(); + var transBefore = new Aop.TraceBeforeEventArgs("BeginTransaction", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore); + try + { + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + ret += this.RawExecuteAffrows(); + } + _transaction.Commit(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "提交", null)); + } + catch (Exception ex) + { + _transaction.Rollback(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "回滚", ex)); + throw ex; + } + _transaction = null; + } } } - else + catch (Exception ex) { - using (var conn = _orm.Ado.MasterPool.Get()) - { - _transaction = conn.Value.BeginTransaction(); - try - { - for (var a = 0; a < ss.Length; a++) - { - _source = ss[a]; - ret += this.RawExecuteAffrows(); - } - _transaction.Commit(); - } - catch - { - _transaction.Rollback(); - throw; - } - _transaction = null; - } + exception = ex; + throw ex; + } + finally + { + var after = new Aop.TraceAfterEventArgs(before, null, exception); + _orm.Aop.TraceAfterHandler?.Invoke(this, after); } ClearData(); return ret; @@ -260,37 +280,57 @@ namespace FreeSql.Internal.CommonProvider if (_transaction == null) this.WithTransaction(_orm.Ado.TransactionCurrentThread); - if (_transaction != null || _batchAutoTransaction == false) + var before = new Aop.TraceBeforeEventArgs("SplitExecuteIdentity", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, before); + Exception exception = null; + try { - for (var a = 0; a < ss.Length; a++) + if (_transaction != null || _batchAutoTransaction == false) { - _source = ss[a]; - if (a < ss.Length - 1) this.RawExecuteAffrows(); - else ret = this.RawExecuteIdentity(); + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + if (a < ss.Length - 1) this.RawExecuteAffrows(); + else ret = this.RawExecuteIdentity(); + } + } + else + { + using (var conn = _orm.Ado.MasterPool.Get()) + { + _transaction = conn.Value.BeginTransaction(); + var transBefore = new Aop.TraceBeforeEventArgs("BeginTransaction", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore); + try + { + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + if (a < ss.Length - 1) this.RawExecuteAffrows(); + else ret = this.RawExecuteIdentity(); + } + _transaction.Commit(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "提交", null)); + } + catch (Exception ex) + { + _transaction.Rollback(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "回滚", ex)); + throw ex; + } + _transaction = null; + } } } - else + catch (Exception ex) { - using (var conn = _orm.Ado.MasterPool.Get()) - { - _transaction = conn.Value.BeginTransaction(); - try - { - for (var a = 0; a < ss.Length; a++) - { - _source = ss[a]; - if (a < ss.Length - 1) this.RawExecuteAffrows(); - else ret = this.RawExecuteIdentity(); - } - _transaction.Commit(); - } - catch - { - _transaction.Rollback(); - throw; - } - _transaction = null; - } + exception = ex; + throw ex; + } + finally + { + var after = new Aop.TraceAfterEventArgs(before, null, exception); + _orm.Aop.TraceAfterHandler?.Invoke(this, after); } ClearData(); return ret; @@ -314,35 +354,55 @@ namespace FreeSql.Internal.CommonProvider if (_transaction == null) this.WithTransaction(_orm.Ado.TransactionCurrentThread); - if (_transaction != null || _batchAutoTransaction == false) + var before = new Aop.TraceBeforeEventArgs("SplitExecuteInserted", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, before); + Exception exception = null; + try { - for (var a = 0; a < ss.Length; a++) + if (_transaction != null || _batchAutoTransaction == false) { - _source = ss[a]; - ret.AddRange(this.RawExecuteInserted()); + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + ret.AddRange(this.RawExecuteInserted()); + } + } + else + { + using (var conn = _orm.Ado.MasterPool.Get()) + { + _transaction = conn.Value.BeginTransaction(); + var transBefore = new Aop.TraceBeforeEventArgs("BeginTransaction", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore); + try + { + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + ret.AddRange(this.RawExecuteInserted()); + } + _transaction.Commit(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "提交", null)); + } + catch (Exception ex) + { + _transaction.Rollback(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "回滚", ex)); + throw ex; + } + _transaction = null; + } } } - else + catch (Exception ex) { - using (var conn = _orm.Ado.MasterPool.Get()) - { - _transaction = conn.Value.BeginTransaction(); - try - { - for (var a = 0; a < ss.Length; a++) - { - _source = ss[a]; - ret.AddRange(this.RawExecuteInserted()); - } - _transaction.Commit(); - } - catch - { - _transaction.Rollback(); - throw; - } - _transaction = null; - } + exception = ex; + throw ex; + } + finally + { + var after = new Aop.TraceAfterEventArgs(before, null, exception); + _orm.Aop.TraceAfterHandler?.Invoke(this, after); } ClearData(); return ret; @@ -353,7 +413,7 @@ namespace FreeSql.Internal.CommonProvider { var sql = ToSql(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var affrows = 0; Exception exception = null; try @@ -368,7 +428,7 @@ namespace FreeSql.Internal.CommonProvider finally { var after = new Aop.CurdAfterEventArgs(before, exception, affrows); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return affrows; } @@ -507,4 +567,3 @@ namespace FreeSql.Internal.CommonProvider } } } - diff --git a/FreeSql/Internal/CommonProvider/InsertProviderAsync.cs b/FreeSql/Internal/CommonProvider/InsertProviderAsync.cs index 14c5cff7..0f6d77d1 100644 --- a/FreeSql/Internal/CommonProvider/InsertProviderAsync.cs +++ b/FreeSql/Internal/CommonProvider/InsertProviderAsync.cs @@ -34,35 +34,55 @@ namespace FreeSql.Internal.CommonProvider if (_transaction == null) this.WithTransaction(_orm.Ado.TransactionCurrentThread); - if (_transaction != null) + var before = new Aop.TraceBeforeEventArgs("SplitExecuteAffrowsAsync", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, before); + Exception exception = null; + try { - for (var a = 0; a < ss.Length; a++) + if (_transaction != null || _batchAutoTransaction == false) { - _source = ss[a]; - ret += await this.RawExecuteAffrowsAsync(); + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + ret += await this.RawExecuteAffrowsAsync(); + } + } + else + { + using (var conn = await _orm.Ado.MasterPool.GetAsync()) + { + _transaction = conn.Value.BeginTransaction(); + var transBefore = new Aop.TraceBeforeEventArgs("BeginTransaction", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore); + try + { + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + ret += await this.RawExecuteAffrowsAsync(); + } + _transaction.Commit(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "提交", null)); + } + catch (Exception ex) + { + _transaction.Rollback(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "回滚", ex)); + throw ex; + } + _transaction = null; + } } } - else + catch (Exception ex) { - using (var conn = await _orm.Ado.MasterPool.GetAsync()) - { - _transaction = conn.Value.BeginTransaction(); - try - { - for (var a = 0; a < ss.Length; a++) - { - _source = ss[a]; - ret += await this.RawExecuteAffrowsAsync(); - } - _transaction.Commit(); - } - catch - { - _transaction.Rollback(); - throw; - } - _transaction = null; - } + exception = ex; + throw ex; + } + finally + { + var after = new Aop.TraceAfterEventArgs(before, null, exception); + _orm.Aop.TraceAfterHandler?.Invoke(this, after); } ClearData(); return ret; @@ -86,42 +106,62 @@ namespace FreeSql.Internal.CommonProvider if (_transaction == null) this.WithTransaction(_orm.Ado.TransactionCurrentThread); - if (_transaction != null) + var before = new Aop.TraceBeforeEventArgs("SplitExecuteIdentityAsync", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, before); + Exception exception = null; + try { - for (var a = 0; a < ss.Length; a++) + if (_transaction != null || _batchAutoTransaction == false) { - _source = ss[a]; - if (a < ss.Length - 1) await this.RawExecuteAffrowsAsync(); - else ret = await this.RawExecuteIdentityAsync(); + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + if (a < ss.Length - 1) await this.RawExecuteAffrowsAsync(); + else ret = await this.RawExecuteIdentityAsync(); + } + } + else + { + using (var conn = await _orm.Ado.MasterPool.GetAsync()) + { + _transaction = conn.Value.BeginTransaction(); + var transBefore = new Aop.TraceBeforeEventArgs("BeginTransaction", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore); + try + { + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + if (a < ss.Length - 1) await this.RawExecuteAffrowsAsync(); + else ret = await this.RawExecuteIdentityAsync(); + } + _transaction.Commit(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "提交", null)); + } + catch (Exception ex) + { + _transaction.Rollback(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "回滚", ex)); + throw ex; + } + _transaction = null; + } } } - else + catch (Exception ex) { - using (var conn = await _orm.Ado.MasterPool.GetAsync()) - { - _transaction = conn.Value.BeginTransaction(); - try - { - for (var a = 0; a < ss.Length; a++) - { - _source = ss[a]; - if (a < ss.Length - 1) await this.RawExecuteAffrowsAsync(); - else ret = await this.RawExecuteIdentityAsync(); - } - _transaction.Commit(); - } - catch - { - _transaction.Rollback(); - throw; - } - _transaction = null; - } + exception = ex; + throw ex; + } + finally + { + var after = new Aop.TraceAfterEventArgs(before, null, exception); + _orm.Aop.TraceAfterHandler?.Invoke(this, after); } ClearData(); return ret; } - + async protected Task> SplitExecuteInsertedAsync(int valuesLimit, int parameterLimit) { var ss = SplitSource(valuesLimit, parameterLimit); @@ -140,35 +180,55 @@ namespace FreeSql.Internal.CommonProvider if (_transaction == null) this.WithTransaction(_orm.Ado.TransactionCurrentThread); - if (_transaction != null) + var before = new Aop.TraceBeforeEventArgs("SplitExecuteInsertedAsync", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, before); + Exception exception = null; + try { - for (var a = 0; a < ss.Length; a++) + if (_transaction != null || _batchAutoTransaction == false) { - _source = ss[a]; - ret.AddRange(await this.RawExecuteInsertedAsync()); + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + ret.AddRange(await this.RawExecuteInsertedAsync()); + } + } + else + { + using (var conn = await _orm.Ado.MasterPool.GetAsync()) + { + _transaction = conn.Value.BeginTransaction(); + var transBefore = new Aop.TraceBeforeEventArgs("BeginTransaction", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore); + try + { + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + ret.AddRange(await this.RawExecuteInsertedAsync()); + } + _transaction.Commit(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "提交", null)); + } + catch (Exception ex) + { + _transaction.Rollback(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "回滚", ex)); + throw ex; + } + _transaction = null; + } } } - else + catch (Exception ex) { - using (var conn = await _orm.Ado.MasterPool.GetAsync()) - { - _transaction = conn.Value.BeginTransaction(); - try - { - for (var a = 0; a < ss.Length; a++) - { - _source = ss[a]; - ret.AddRange(await this.RawExecuteInsertedAsync()); - } - _transaction.Commit(); - } - catch - { - _transaction.Rollback(); - throw; - } - _transaction = null; - } + exception = ex; + throw ex; + } + finally + { + var after = new Aop.TraceAfterEventArgs(before, null, exception); + _orm.Aop.TraceAfterHandler?.Invoke(this, after); } ClearData(); return ret; @@ -178,7 +238,7 @@ namespace FreeSql.Internal.CommonProvider { var sql = ToSql(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var affrows = 0; Exception exception = null; try @@ -193,7 +253,7 @@ namespace FreeSql.Internal.CommonProvider finally { var after = new Aop.CurdAfterEventArgs(before, exception, affrows); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return affrows; } @@ -207,4 +267,3 @@ namespace FreeSql.Internal.CommonProvider #endif } } - diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs index 53e1acae..3915bb22 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs @@ -299,7 +299,7 @@ namespace FreeSql.Internal.CommonProvider var sql = this.ToSql(field); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); DataTable ret = null; Exception exception = null; try @@ -314,7 +314,7 @@ namespace FreeSql.Internal.CommonProvider finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -325,7 +325,7 @@ namespace FreeSql.Internal.CommonProvider var type = typeof(TTuple); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); var flagStr = $"ToListField:{field}"; Exception exception = null; @@ -345,7 +345,7 @@ namespace FreeSql.Internal.CommonProvider finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -353,7 +353,7 @@ namespace FreeSql.Internal.CommonProvider { var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -377,7 +377,7 @@ namespace FreeSql.Internal.CommonProvider finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } foreach (var include in _includeToList) include?.Invoke(ret); _trackToList?.Invoke(ret); @@ -403,7 +403,7 @@ namespace FreeSql.Internal.CommonProvider { var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); var retCount = 0; Exception exception = null; @@ -444,7 +444,7 @@ namespace FreeSql.Internal.CommonProvider finally { var after = new Aop.CurdAfterEventArgs(before, exception, retCount); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } if (ret.Any() || checkDoneTimes == 0) { @@ -492,7 +492,7 @@ namespace FreeSql.Internal.CommonProvider var type = typeof(TReturn); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -514,7 +514,7 @@ namespace FreeSql.Internal.CommonProvider finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } if (typeof(TReturn) == typeof(T1)) foreach (var include in _includeToList) include?.Invoke(ret); @@ -1082,7 +1082,7 @@ namespace FreeSql.Internal.CommonProvider var sql = this.InternalToSql(select); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); DataTable ret = null; Exception exception = null; try @@ -1097,7 +1097,7 @@ namespace FreeSql.Internal.CommonProvider finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -1142,7 +1142,7 @@ namespace FreeSql.Internal.CommonProvider var sql = this.ToSql(field); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); DataTable ret = null; Exception exception = null; try @@ -1157,7 +1157,7 @@ namespace FreeSql.Internal.CommonProvider finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -1168,7 +1168,7 @@ namespace FreeSql.Internal.CommonProvider var type = typeof(TTuple); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); var flagStr = $"ToListField:{field}"; Exception exception = null; @@ -1189,7 +1189,7 @@ namespace FreeSql.Internal.CommonProvider finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -1198,7 +1198,7 @@ namespace FreeSql.Internal.CommonProvider { var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -1223,7 +1223,7 @@ namespace FreeSql.Internal.CommonProvider finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } foreach (var include in _includeToListAsync) await include?.Invoke(ret); _trackToList?.Invoke(ret); @@ -1265,7 +1265,7 @@ namespace FreeSql.Internal.CommonProvider var type = typeof(TReturn); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -1288,7 +1288,7 @@ namespace FreeSql.Internal.CommonProvider finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } if (typeof(TReturn) == typeof(T1)) foreach (var include in _includeToListAsync) await include?.Invoke(ret); @@ -1328,7 +1328,7 @@ namespace FreeSql.Internal.CommonProvider var sql = this.InternalToSql(select); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); DataTable ret = null; Exception exception = null; try @@ -1343,7 +1343,7 @@ namespace FreeSql.Internal.CommonProvider finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs index ce44bcba..629c4c63 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs @@ -150,35 +150,55 @@ namespace FreeSql.Internal.CommonProvider if (_transaction == null) this.WithTransaction(_orm.Ado.TransactionCurrentThread); - if (_transaction != null || _batchAutoTransaction == false) + var before = new Aop.TraceBeforeEventArgs("SplitExecuteAffrows", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, before); + Exception exception = null; + try { - for (var a = 0; a < ss.Length; a++) + if (_transaction != null || _batchAutoTransaction == false) { - _source = ss[a]; - ret += this.RawExecuteAffrows(); + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + ret += this.RawExecuteAffrows(); + } + } + else + { + using (var conn = _orm.Ado.MasterPool.Get()) + { + _transaction = conn.Value.BeginTransaction(); + var transBefore = new Aop.TraceBeforeEventArgs("BeginTransaction", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore); + try + { + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + ret += this.RawExecuteAffrows(); + } + _transaction.Commit(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "提交", null)); + } + catch (Exception ex) + { + _transaction.Rollback(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "回滚", ex)); + throw ex; + } + _transaction = null; + } } } - else + catch (Exception ex) { - using (var conn = _orm.Ado.MasterPool.Get()) - { - _transaction = conn.Value.BeginTransaction(); - try - { - for (var a = 0; a < ss.Length; a++) - { - _source = ss[a]; - ret += this.RawExecuteAffrows(); - } - _transaction.Commit(); - } - catch - { - _transaction.Rollback(); - throw; - } - _transaction = null; - } + exception = ex; + throw ex; + } + finally + { + var after = new Aop.TraceAfterEventArgs(before, null, exception); + _orm.Aop.TraceAfterHandler?.Invoke(this, after); } ClearData(); return ret; @@ -197,35 +217,55 @@ namespace FreeSql.Internal.CommonProvider if (_transaction == null) this.WithTransaction(_orm.Ado.TransactionCurrentThread); - if (_transaction != null || _batchAutoTransaction == false) + var before = new Aop.TraceBeforeEventArgs("SplitExecuteUpdated", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, before); + Exception exception = null; + try { - for (var a = 0; a < ss.Length; a++) + if (_transaction != null || _batchAutoTransaction == false) { - _source = ss[a]; - ret.AddRange(this.RawExecuteUpdated()); + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + ret.AddRange(this.RawExecuteUpdated()); + } + } + else + { + using (var conn = _orm.Ado.MasterPool.Get()) + { + _transaction = conn.Value.BeginTransaction(); + var transBefore = new Aop.TraceBeforeEventArgs("BeginTransaction", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore); + try + { + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + ret.AddRange(this.RawExecuteUpdated()); + } + _transaction.Commit(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "提交", null)); + } + catch (Exception ex) + { + _transaction.Rollback(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "回滚", ex)); + throw ex; + } + _transaction = null; + } } } - else + catch (Exception ex) { - using (var conn = _orm.Ado.MasterPool.Get()) - { - _transaction = conn.Value.BeginTransaction(); - try - { - for (var a = 0; a < ss.Length; a++) - { - _source = ss[a]; - ret.AddRange(this.RawExecuteUpdated()); - } - _transaction.Commit(); - } - catch - { - _transaction.Rollback(); - throw; - } - _transaction = null; - } + exception = ex; + throw ex; + } + finally + { + var after = new Aop.TraceAfterEventArgs(before, null, exception); + _orm.Aop.TraceAfterHandler?.Invoke(this, after); } ClearData(); return ret; @@ -238,7 +278,7 @@ namespace FreeSql.Internal.CommonProvider if (string.IsNullOrEmpty(sql)) return 0; var dbParms = _params.Concat(_paramsSource).ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var affrows = 0; Exception exception = null; try @@ -254,7 +294,7 @@ namespace FreeSql.Internal.CommonProvider finally { var after = new Aop.CurdAfterEventArgs(before, exception, affrows); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return affrows; } @@ -289,7 +329,7 @@ namespace FreeSql.Internal.CommonProvider public static void AuditDataValue(object sender, IEnumerable data, IFreeSql orm, TableInfo table, Dictionary changedDict) { if (data?.Any() != true) return; - if (orm.Aop.AuditValue == null) return; + if (orm.Aop.AuditValueHandler == null) return; foreach (var d in data) { if (d == null) continue; @@ -297,7 +337,7 @@ namespace FreeSql.Internal.CommonProvider { object val = col.GetMapValue(d); var auditArgs = new Aop.AuditValueEventArgs(Aop.AuditValueType.Update, col, table.Properties[col.CsName], val); - orm.Aop.AuditValue(sender, auditArgs); + orm.Aop.AuditValueHandler(sender, auditArgs); if (auditArgs.IsChanged) { col.SetMapValue(d, val = auditArgs.Value); @@ -309,13 +349,13 @@ namespace FreeSql.Internal.CommonProvider } public static void AuditDataValue(object sender, T1 data, IFreeSql orm, TableInfo table, Dictionary changedDict) { - if (orm.Aop.AuditValue == null) return; + if (orm.Aop.AuditValueHandler == null) return; if (data == null) return; foreach (var col in table.Columns.Values) { object val = col.GetMapValue(data); var auditArgs = new Aop.AuditValueEventArgs(Aop.AuditValueType.Update, col, table.Properties[col.CsName], val); - orm.Aop.AuditValue(sender, auditArgs); + orm.Aop.AuditValueHandler(sender, auditArgs); if (auditArgs.IsChanged) { col.SetMapValue(data, val = auditArgs.Value); @@ -605,7 +645,7 @@ namespace FreeSql.Internal.CommonProvider else if (_source.Count > 1) { //批量保存 Source if (_table.Primarys.Any() == false) return null; - + var caseWhen = new StringBuilder(); caseWhen.Append("CASE "); ToSqlCase(caseWhen, _table.Primarys); @@ -698,4 +738,4 @@ namespace FreeSql.Internal.CommonProvider return sb.ToString(); } } -} \ No newline at end of file +} diff --git a/FreeSql/Internal/CommonProvider/UpdateProviderAsync.cs b/FreeSql/Internal/CommonProvider/UpdateProviderAsync.cs index 5d2767f0..87ca9d41 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProviderAsync.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProviderAsync.cs @@ -30,35 +30,55 @@ namespace FreeSql.Internal.CommonProvider if (_transaction == null) this.WithTransaction(_orm.Ado.TransactionCurrentThread); - if (_transaction != null) + var before = new Aop.TraceBeforeEventArgs("SplitExecuteAffrowsAsync", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, before); + Exception exception = null; + try { - for (var a = 0; a < ss.Length; a++) + if (_transaction != null || _batchAutoTransaction == false) { - _source = ss[a]; - ret += await this.RawExecuteAffrowsAsync(); + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + ret += await this.RawExecuteAffrowsAsync(); + } + } + else + { + using (var conn = await _orm.Ado.MasterPool.GetAsync()) + { + _transaction = conn.Value.BeginTransaction(); + var transBefore = new Aop.TraceBeforeEventArgs("BeginTransaction", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore); + try + { + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + ret += await this.RawExecuteAffrowsAsync(); + } + _transaction.Commit(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "提交", null)); + } + catch (Exception ex) + { + _transaction.Rollback(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "回滚", ex)); + throw ex; + } + _transaction = null; + } } } - else + catch (Exception ex) { - using (var conn = await _orm.Ado.MasterPool.GetAsync()) - { - _transaction = conn.Value.BeginTransaction(); - try - { - for (var a = 0; a < ss.Length; a++) - { - _source = ss[a]; - ret += await this.RawExecuteAffrowsAsync(); - } - _transaction.Commit(); - } - catch - { - _transaction.Rollback(); - throw; - } - _transaction = null; - } + exception = ex; + throw ex; + } + finally + { + var after = new Aop.TraceAfterEventArgs(before, null, exception); + _orm.Aop.TraceAfterHandler?.Invoke(this, after); } ClearData(); return ret; @@ -76,35 +96,55 @@ namespace FreeSql.Internal.CommonProvider if (_transaction == null) this.WithTransaction(_orm.Ado.TransactionCurrentThread); - if (_transaction != null) + var before = new Aop.TraceBeforeEventArgs("SplitExecuteUpdatedAsync", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, before); + Exception exception = null; + try { - for (var a = 0; a < ss.Length; a++) + if (_transaction != null || _batchAutoTransaction == false) { - _source = ss[a]; - ret.AddRange(await this.RawExecuteUpdatedAsync()); + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + ret.AddRange(await this.RawExecuteUpdatedAsync()); + } + } + else + { + using (var conn = await _orm.Ado.MasterPool.GetAsync()) + { + _transaction = conn.Value.BeginTransaction(); + var transBefore = new Aop.TraceBeforeEventArgs("BeginTransaction", null); + _orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore); + try + { + for (var a = 0; a < ss.Length; a++) + { + _source = ss[a]; + ret.AddRange(await this.RawExecuteUpdatedAsync()); + } + _transaction.Commit(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "提交", null)); + } + catch (Exception ex) + { + _transaction.Rollback(); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "回滚", ex)); + throw ex; + } + _transaction = null; + } } } - else + catch (Exception ex) { - using (var conn = await _orm.Ado.MasterPool.GetAsync()) - { - _transaction = conn.Value.BeginTransaction(); - try - { - for (var a = 0; a < ss.Length; a++) - { - _source = ss[a]; - ret.AddRange(await this.RawExecuteUpdatedAsync()); - } - _transaction.Commit(); - } - catch - { - _transaction.Rollback(); - throw; - } - _transaction = null; - } + exception = ex; + throw ex; + } + finally + { + var after = new Aop.TraceAfterEventArgs(before, null, exception); + _orm.Aop.TraceAfterHandler?.Invoke(this, after); } ClearData(); return ret; @@ -116,7 +156,7 @@ namespace FreeSql.Internal.CommonProvider if (string.IsNullOrEmpty(sql)) return 0; var dbParms = _params.Concat(_paramsSource).ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var affrows = 0; Exception exception = null; try @@ -132,7 +172,7 @@ namespace FreeSql.Internal.CommonProvider finally { var after = new Aop.CurdAfterEventArgs(before, exception, affrows); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return affrows; } @@ -142,4 +182,4 @@ namespace FreeSql.Internal.CommonProvider public abstract Task> ExecuteUpdatedAsync(); #endif } -} \ No newline at end of file +} diff --git a/FreeSql/Internal/CommonUtils.cs b/FreeSql/Internal/CommonUtils.cs index f695b8aa..cbab8e0a 100644 --- a/FreeSql/Internal/CommonUtils.cs +++ b/FreeSql/Internal/CommonUtils.cs @@ -100,10 +100,10 @@ namespace FreeSql.Internal public TableAttribute GetEntityTableAttribute(Type type) { TableAttribute attr = null; - if (_orm.Aop.ConfigEntity != null) + if (_orm.Aop.ConfigEntityHandler != null) { var aope = new Aop.ConfigEntityEventArgs(type); - _orm.Aop.ConfigEntity(_orm, aope); + _orm.Aop.ConfigEntityHandler(_orm, aope); attr = aope.ModifyResult; } if (attr == null) attr = new TableAttribute(); @@ -130,10 +130,10 @@ namespace FreeSql.Internal public ColumnAttribute GetEntityColumnAttribute(Type type, PropertyInfo proto) { ColumnAttribute attr = null; - if (_orm.Aop.ConfigEntityProperty != null) + if (_orm.Aop.ConfigEntityPropertyHandler != null) { var aope = new Aop.ConfigEntityPropertyEventArgs(type, proto); - _orm.Aop.ConfigEntityProperty(_orm, aope); + _orm.Aop.ConfigEntityPropertyHandler(_orm, aope); attr = aope.ModifyResult; } if (attr == null) attr = new ColumnAttribute(); @@ -219,10 +219,10 @@ namespace FreeSql.Internal public IndexAttribute[] GetEntityIndexAttribute(Type type) { var ret = new Dictionary(); - if (_orm.Aop.ConfigEntity != null) + if (_orm.Aop.ConfigEntityHandler != null) { var aope = new Aop.ConfigEntityEventArgs(type); - _orm.Aop.ConfigEntity(_orm, aope); + _orm.Aop.ConfigEntityHandler(_orm, aope); foreach (var idxattr in aope.ModifyIndexResult) if (!string.IsNullOrEmpty(idxattr.Name) && !string.IsNullOrEmpty(idxattr.Fields)) { diff --git a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessInsert.cs b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessInsert.cs index 1ab68770..012931a7 100644 --- a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessInsert.cs +++ b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessInsert.cs @@ -31,7 +31,7 @@ namespace FreeSql.MsAccess.Curd { var sql = this.ToSql(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var affrows = 0; Exception exception = null; try @@ -46,7 +46,7 @@ namespace FreeSql.MsAccess.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, affrows); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return affrows; } @@ -56,7 +56,7 @@ namespace FreeSql.MsAccess.Curd if (string.IsNullOrEmpty(sql)) return 0; var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, string.Concat(sql, "; SELECT @@identity;"), _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); long ret = 0; Exception exception = null; var isUseConnection = _connection != null; @@ -86,7 +86,7 @@ namespace FreeSql.MsAccess.Curd { if (isUseConnection == false) _connection = null; var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -110,7 +110,7 @@ namespace FreeSql.MsAccess.Curd { var sql = this.ToSql(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var affrows = 0; Exception exception = null; try @@ -125,7 +125,7 @@ namespace FreeSql.MsAccess.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, affrows); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return affrows; } @@ -135,7 +135,7 @@ namespace FreeSql.MsAccess.Curd if (string.IsNullOrEmpty(sql)) return 0; var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, string.Concat(sql, "; SELECT @@identity;"), _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); long ret = 0; Exception exception = null; var isUseConnection = _connection != null; @@ -165,7 +165,7 @@ namespace FreeSql.MsAccess.Curd { if (isUseConnection == false) _connection = null; var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlDelete.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlDelete.cs index 60949a68..296a6fd3 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlDelete.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlDelete.cs @@ -33,7 +33,7 @@ namespace FreeSql.MySql.Curd sql = sb.ToString(); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -48,7 +48,7 @@ namespace FreeSql.MySql.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } this.ClearData(); return ret; @@ -74,7 +74,7 @@ namespace FreeSql.MySql.Curd sql = sb.ToString(); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -89,7 +89,7 @@ namespace FreeSql.MySql.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } this.ClearData(); return ret; diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs index f84783fe..190e6b7e 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs @@ -48,7 +48,7 @@ namespace FreeSql.MySql.Curd sql = string.Concat(sql, "; SELECT LAST_INSERT_ID();"); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); long ret = 0; Exception exception = null; try @@ -63,7 +63,7 @@ namespace FreeSql.MySql.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -84,7 +84,7 @@ namespace FreeSql.MySql.Curd } sql = sb.ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -99,7 +99,7 @@ namespace FreeSql.MySql.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -117,7 +117,7 @@ namespace FreeSql.MySql.Curd sql = string.Concat(sql, "; SELECT LAST_INSERT_ID();"); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); long ret = 0; Exception exception = null; try @@ -132,7 +132,7 @@ namespace FreeSql.MySql.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -153,7 +153,7 @@ namespace FreeSql.MySql.Curd } sql = sb.ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -168,7 +168,7 @@ namespace FreeSql.MySql.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs index b208affd..084553f0 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs @@ -46,7 +46,7 @@ namespace FreeSql.MySql.Curd sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -62,7 +62,7 @@ namespace FreeSql.MySql.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -127,7 +127,7 @@ namespace FreeSql.MySql.Curd sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -143,7 +143,7 @@ namespace FreeSql.MySql.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/Providers/FreeSql.Provider.MySql/Curd/OnDuplicateKeyUpdate.cs b/Providers/FreeSql.Provider.MySql/Curd/OnDuplicateKeyUpdate.cs index 9804ce92..883630c8 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/OnDuplicateKeyUpdate.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/OnDuplicateKeyUpdate.cs @@ -117,7 +117,7 @@ namespace FreeSql.MySql.Curd if (string.IsNullOrEmpty(sql)) return 0; var before = new CurdBeforeEventArgs(_mysqlInsert.InternalTable.Type, _mysqlInsert.InternalTable, CurdType.Insert, sql, _mysqlInsert.InternalParams); - _mysqlInsert.InternalOrm.Aop.CurdBefore?.Invoke(_mysqlInsert, before); + _mysqlInsert.InternalOrm.Aop.CurdBeforeHandler?.Invoke(_mysqlInsert, before); long ret = 0; Exception exception = null; try @@ -132,7 +132,7 @@ namespace FreeSql.MySql.Curd finally { var after = new CurdAfterEventArgs(before, exception, ret); - _mysqlInsert.InternalOrm.Aop.CurdAfter?.Invoke(_mysqlInsert, after); + _mysqlInsert.InternalOrm.Aop.CurdAfterHandler?.Invoke(_mysqlInsert, after); ClearData(); } return ret; @@ -146,7 +146,7 @@ namespace FreeSql.MySql.Curd if (string.IsNullOrEmpty(sql)) return 0; var before = new CurdBeforeEventArgs(_mysqlInsert.InternalTable.Type, _mysqlInsert.InternalTable, CurdType.Insert, sql, _mysqlInsert.InternalParams); - _mysqlInsert.InternalOrm.Aop.CurdBefore?.Invoke(_mysqlInsert, before); + _mysqlInsert.InternalOrm.Aop.CurdBeforeHandler?.Invoke(_mysqlInsert, before); long ret = 0; Exception exception = null; try @@ -161,7 +161,7 @@ namespace FreeSql.MySql.Curd finally { var after = new CurdAfterEventArgs(before, exception, ret); - _mysqlInsert.InternalOrm.Aop.CurdAfter?.Invoke(_mysqlInsert, after); + _mysqlInsert.InternalOrm.Aop.CurdAfterHandler?.Invoke(_mysqlInsert, after); ClearData(); } return ret; diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsert.cs b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsert.cs index 177f36e8..6b6c5565 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsert.cs @@ -97,7 +97,7 @@ namespace FreeSql.Odbc.Dameng if (_identCol == null || _source.Count > 1) { before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { ret = _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, _params); @@ -110,7 +110,7 @@ namespace FreeSql.Odbc.Dameng finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return 0; } @@ -120,7 +120,7 @@ namespace FreeSql.Odbc.Dameng sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}"; var dbParms = _params.Concat(new[] { identParam }).ToArray(); before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, dbParms); @@ -134,7 +134,7 @@ namespace FreeSql.Odbc.Dameng finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -167,7 +167,7 @@ namespace FreeSql.Odbc.Dameng if (_identCol == null || _source.Count > 1) { before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { ret = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _params); @@ -180,7 +180,7 @@ namespace FreeSql.Odbc.Dameng finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return 0; } @@ -190,7 +190,7 @@ namespace FreeSql.Odbc.Dameng sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}"; var dbParms = _params.Concat(new[] { identParam }).ToArray(); before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, dbParms); @@ -204,7 +204,7 @@ namespace FreeSql.Odbc.Dameng finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcInsert.cs b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcInsert.cs index 44cc9c5e..dddd0cf0 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcInsert.cs @@ -30,7 +30,7 @@ namespace FreeSql.Odbc.Default Object poolConn = null; var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, string.Concat(sql, $"; {_utils.Adapter.InsertAfterGetIdentitySql}"), _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); long ret = 0; Exception exception = null; try @@ -56,7 +56,7 @@ namespace FreeSql.Odbc.Default _orm.Ado.MasterPool.Return(poolConn); var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -76,7 +76,7 @@ namespace FreeSql.Odbc.Default Object poolConn = null; var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, string.Concat(sql, $"; {_utils.Adapter.InsertAfterGetIdentitySql}"), _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); long ret = 0; Exception exception = null; try @@ -102,7 +102,7 @@ namespace FreeSql.Odbc.Default _orm.Ado.MasterPool.Return(poolConn); var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/Providers/FreeSql.Provider.Odbc/GBase/Curd/__OdbcGBaseInsert.cs b/Providers/FreeSql.Provider.Odbc/GBase/Curd/__OdbcGBaseInsert.cs index b017e33d..8036e82a 100644 --- a/Providers/FreeSql.Provider.Odbc/GBase/Curd/__OdbcGBaseInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/GBase/Curd/__OdbcGBaseInsert.cs @@ -33,7 +33,7 @@ namespace FreeSql.Odbc.GBase if (identCols.Any() == false) { before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { ret = _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, _params); @@ -46,13 +46,13 @@ namespace FreeSql.Odbc.GBase finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return 0; } sql = string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)); before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_connection, _transaction, CommandType.Text, sql, _params)), out ret); @@ -65,7 +65,7 @@ namespace FreeSql.Odbc.GBase finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -99,7 +99,7 @@ namespace FreeSql.Odbc.GBase if (identCols.Any() == false) { before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { ret = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _params); @@ -112,13 +112,13 @@ namespace FreeSql.Odbc.GBase finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return 0; } sql = string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)); before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_connection, _transaction, CommandType.Text, sql, _params)), out ret); @@ -131,7 +131,7 @@ namespace FreeSql.Odbc.GBase finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlDelete.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlDelete.cs index c10fcb88..a81acc88 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlDelete.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlDelete.cs @@ -33,7 +33,7 @@ namespace FreeSql.Odbc.MySql sql = sb.ToString(); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -48,7 +48,7 @@ namespace FreeSql.Odbc.MySql finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } this.ClearData(); return ret; @@ -74,7 +74,7 @@ namespace FreeSql.Odbc.MySql sql = sb.ToString(); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -89,7 +89,7 @@ namespace FreeSql.Odbc.MySql finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } this.ClearData(); return ret; diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsert.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsert.cs index d90e0ec4..41b4b0bf 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsert.cs @@ -29,7 +29,7 @@ namespace FreeSql.Odbc.MySql Object poolConn = null; var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, string.Concat(sql, "; SELECT LAST_INSERT_ID();"), _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); long ret = 0; Exception exception = null; try @@ -55,7 +55,7 @@ namespace FreeSql.Odbc.MySql _orm.Ado.MasterPool.Return(poolConn); var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -76,7 +76,7 @@ namespace FreeSql.Odbc.MySql } sql = sb.ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -91,7 +91,7 @@ namespace FreeSql.Odbc.MySql finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -109,7 +109,7 @@ namespace FreeSql.Odbc.MySql Object poolConn = null; var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, string.Concat(sql, "; SELECT LAST_INSERT_ID();"), _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); long ret = 0; Exception exception = null; try @@ -135,7 +135,7 @@ namespace FreeSql.Odbc.MySql _orm.Ado.MasterPool.Return(poolConn); var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -156,7 +156,7 @@ namespace FreeSql.Odbc.MySql } sql = sb.ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -171,7 +171,7 @@ namespace FreeSql.Odbc.MySql finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs index b0892779..4613ed9d 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs @@ -40,7 +40,7 @@ namespace FreeSql.Odbc.MySql sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -56,7 +56,7 @@ namespace FreeSql.Odbc.MySql finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -121,7 +121,7 @@ namespace FreeSql.Odbc.MySql sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -137,7 +137,7 @@ namespace FreeSql.Odbc.MySql finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs index 0e97103b..ac7cb08e 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs @@ -97,7 +97,7 @@ namespace FreeSql.Odbc.Oracle if (_identCol == null || _source.Count > 1) { before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { ret = _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, _params); @@ -110,7 +110,7 @@ namespace FreeSql.Odbc.Oracle finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return 0; } @@ -120,7 +120,7 @@ namespace FreeSql.Odbc.Oracle sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}"; var dbParms = _params.Concat(new[] { identParam }).ToArray(); before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, dbParms); @@ -134,7 +134,7 @@ namespace FreeSql.Odbc.Oracle finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -167,7 +167,7 @@ namespace FreeSql.Odbc.Oracle if (_identCol == null || _source.Count > 1) { before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { ret = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _params); @@ -180,7 +180,7 @@ namespace FreeSql.Odbc.Oracle finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return 0; } @@ -190,7 +190,7 @@ namespace FreeSql.Odbc.Oracle sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}"; var dbParms = _params.Concat(new[] { identParam }).ToArray(); before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, dbParms); @@ -204,7 +204,7 @@ namespace FreeSql.Odbc.Oracle finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLDelete.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLDelete.cs index 1fe6c5ee..0d50f9dc 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLDelete.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLDelete.cs @@ -33,7 +33,7 @@ namespace FreeSql.Odbc.PostgreSQL sql = sb.ToString(); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -48,7 +48,7 @@ namespace FreeSql.Odbc.PostgreSQL finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } this.ClearData(); return ret; @@ -74,7 +74,7 @@ namespace FreeSql.Odbc.PostgreSQL sql = sb.ToString(); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -89,7 +89,7 @@ namespace FreeSql.Odbc.PostgreSQL finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } this.ClearData(); return ret; diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLInsert.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLInsert.cs index 3431e614..a2a2a2a2 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLInsert.cs @@ -33,7 +33,7 @@ namespace FreeSql.Odbc.PostgreSQL if (identCols.Any() == false) { before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { ret = _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, _params); @@ -46,13 +46,13 @@ namespace FreeSql.Odbc.PostgreSQL finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return 0; } sql = string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)); before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_connection, _transaction, CommandType.Text, sql, _params)), out ret); @@ -65,7 +65,7 @@ namespace FreeSql.Odbc.PostgreSQL finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -87,7 +87,7 @@ namespace FreeSql.Odbc.PostgreSQL } sql = sb.ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -102,7 +102,7 @@ namespace FreeSql.Odbc.PostgreSQL finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -126,7 +126,7 @@ namespace FreeSql.Odbc.PostgreSQL if (identCols.Any() == false) { before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { ret = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _params); @@ -139,13 +139,13 @@ namespace FreeSql.Odbc.PostgreSQL finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return 0; } sql = string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)); before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_connection, _transaction, CommandType.Text, sql, _params)), out ret); @@ -158,7 +158,7 @@ namespace FreeSql.Odbc.PostgreSQL finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -179,7 +179,7 @@ namespace FreeSql.Odbc.PostgreSQL } sql = sb.ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -194,7 +194,7 @@ namespace FreeSql.Odbc.PostgreSQL finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs index fb8ce06a..8bb51100 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs @@ -39,7 +39,7 @@ namespace FreeSql.Odbc.PostgreSQL sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -55,7 +55,7 @@ namespace FreeSql.Odbc.PostgreSQL finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -129,7 +129,7 @@ namespace FreeSql.Odbc.PostgreSQL sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -145,7 +145,7 @@ namespace FreeSql.Odbc.PostgreSQL finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerDelete.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerDelete.cs index 6cee6f44..6370377c 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerDelete.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerDelete.cs @@ -38,7 +38,7 @@ namespace FreeSql.Odbc.SqlServer sql = sb.ToString(); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -53,7 +53,7 @@ namespace FreeSql.Odbc.SqlServer finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } this.ClearData(); return ret; @@ -84,7 +84,7 @@ namespace FreeSql.Odbc.SqlServer sql = sb.ToString(); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -99,7 +99,7 @@ namespace FreeSql.Odbc.SqlServer finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } this.ClearData(); return ret; diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs index 5bd211c0..d134cfe0 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs @@ -26,7 +26,7 @@ namespace FreeSql.Odbc.SqlServer var versionGreaterThan10 = (_commonUtils as OdbcSqlServerUtils).ServerVersion > 10; var sql = versionGreaterThan10 ? this.ToSql() : this.ToSqlValuesOrSelectUnionAll(false); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var affrows = 0; Exception exception = null; try @@ -41,7 +41,7 @@ namespace FreeSql.Odbc.SqlServer finally { var after = new Aop.CurdAfterEventArgs(before, exception, affrows); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return affrows; } @@ -53,7 +53,7 @@ namespace FreeSql.Odbc.SqlServer sql = string.Concat(sql, "; SELECT SCOPE_IDENTITY();"); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); long ret = 0; Exception exception = null; try @@ -68,7 +68,7 @@ namespace FreeSql.Odbc.SqlServer finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -105,7 +105,7 @@ namespace FreeSql.Odbc.SqlServer sql = sb.ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -120,7 +120,7 @@ namespace FreeSql.Odbc.SqlServer finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -136,7 +136,7 @@ namespace FreeSql.Odbc.SqlServer var versionGreaterThan10 = (_commonUtils as OdbcSqlServerUtils).ServerVersion > 10; var sql = versionGreaterThan10 ? this.ToSql() : this.ToSqlValuesOrSelectUnionAll(false); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var affrows = 0; Exception exception = null; try @@ -151,7 +151,7 @@ namespace FreeSql.Odbc.SqlServer finally { var after = new Aop.CurdAfterEventArgs(before, exception, affrows); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return affrows; } @@ -163,7 +163,7 @@ namespace FreeSql.Odbc.SqlServer sql = string.Concat(sql, "; SELECT SCOPE_IDENTITY();"); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); long ret = 0; Exception exception = null; try @@ -178,7 +178,7 @@ namespace FreeSql.Odbc.SqlServer finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -215,7 +215,7 @@ namespace FreeSql.Odbc.SqlServer sql = sb.ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -230,7 +230,7 @@ namespace FreeSql.Odbc.SqlServer finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs index c6b1f146..3af0446f 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs @@ -44,7 +44,7 @@ namespace FreeSql.Odbc.SqlServer sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -60,7 +60,7 @@ namespace FreeSql.Odbc.SqlServer finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -128,7 +128,7 @@ namespace FreeSql.Odbc.SqlServer sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -144,7 +144,7 @@ namespace FreeSql.Odbc.SqlServer finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs b/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs index da9c4f0e..71ad77dc 100644 --- a/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs +++ b/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs @@ -99,7 +99,7 @@ namespace FreeSql.Oracle.Curd if (_identCol == null || _source.Count > 1) { before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { ret = _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, _params); @@ -112,7 +112,7 @@ namespace FreeSql.Oracle.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return 0; } @@ -122,7 +122,7 @@ namespace FreeSql.Oracle.Curd sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}"; var dbParms = _params.Concat(new[] { identParam }).ToArray(); before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, dbParms); @@ -136,7 +136,7 @@ namespace FreeSql.Oracle.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -168,7 +168,7 @@ namespace FreeSql.Oracle.Curd if (_identCol == null || _source.Count > 1) { before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { ret = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _params); @@ -181,7 +181,7 @@ namespace FreeSql.Oracle.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return 0; } @@ -191,7 +191,7 @@ namespace FreeSql.Oracle.Curd sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}"; var dbParms = _params.Concat(new[] { identParam }).ToArray(); before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, dbParms); @@ -205,7 +205,7 @@ namespace FreeSql.Oracle.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/OnConflictDoUpdate.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/OnConflictDoUpdate.cs index bedded9d..c4d87aed 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/Curd/OnConflictDoUpdate.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/OnConflictDoUpdate.cs @@ -156,7 +156,7 @@ namespace FreeSql.PostgreSQL.Curd if (string.IsNullOrEmpty(sql)) return 0; var before = new CurdBeforeEventArgs(_pgsqlInsert.InternalTable.Type, _pgsqlInsert.InternalTable, CurdType.Insert, sql, _pgsqlInsert.InternalParams); - _pgsqlInsert.InternalOrm.Aop.CurdBefore?.Invoke(_pgsqlInsert, before); + _pgsqlInsert.InternalOrm.Aop.CurdBeforeHandler?.Invoke(_pgsqlInsert, before); long ret = 0; Exception exception = null; try @@ -171,7 +171,7 @@ namespace FreeSql.PostgreSQL.Curd finally { var after = new CurdAfterEventArgs(before, exception, ret); - _pgsqlInsert.InternalOrm.Aop.CurdAfter?.Invoke(_pgsqlInsert, after); + _pgsqlInsert.InternalOrm.Aop.CurdAfterHandler?.Invoke(_pgsqlInsert, after); ClearData(); } return ret; @@ -185,7 +185,7 @@ namespace FreeSql.PostgreSQL.Curd if (string.IsNullOrEmpty(sql)) return 0; var before = new CurdBeforeEventArgs(_pgsqlInsert.InternalTable.Type, _pgsqlInsert.InternalTable, CurdType.Insert, sql, _pgsqlInsert.InternalParams); - _pgsqlInsert.InternalOrm.Aop.CurdBefore?.Invoke(_pgsqlInsert, before); + _pgsqlInsert.InternalOrm.Aop.CurdBeforeHandler?.Invoke(_pgsqlInsert, before); long ret = 0; Exception exception = null; try @@ -200,7 +200,7 @@ namespace FreeSql.PostgreSQL.Curd finally { var after = new CurdAfterEventArgs(before, exception, ret); - _pgsqlInsert.InternalOrm.Aop.CurdAfter?.Invoke(_pgsqlInsert, after); + _pgsqlInsert.InternalOrm.Aop.CurdAfterHandler?.Invoke(_pgsqlInsert, after); ClearData(); } return ret; diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLDelete.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLDelete.cs index b4586c2d..9a275042 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLDelete.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLDelete.cs @@ -33,7 +33,7 @@ namespace FreeSql.PostgreSQL.Curd sql = sb.ToString(); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -48,7 +48,7 @@ namespace FreeSql.PostgreSQL.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } this.ClearData(); return ret; @@ -74,7 +74,7 @@ namespace FreeSql.PostgreSQL.Curd sql = sb.ToString(); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -89,7 +89,7 @@ namespace FreeSql.PostgreSQL.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } this.ClearData(); return ret; diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLInsert.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLInsert.cs index da3f8675..d010dd01 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLInsert.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLInsert.cs @@ -46,7 +46,7 @@ namespace FreeSql.PostgreSQL.Curd if (identCols.Any() == false) { before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { ret = _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, _params); @@ -59,13 +59,13 @@ namespace FreeSql.PostgreSQL.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return 0; } sql = string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)); before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_connection, _transaction, CommandType.Text, sql, _params)), out ret); @@ -78,7 +78,7 @@ namespace FreeSql.PostgreSQL.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -100,7 +100,7 @@ namespace FreeSql.PostgreSQL.Curd } sql = sb.ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -115,7 +115,7 @@ namespace FreeSql.PostgreSQL.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -139,7 +139,7 @@ namespace FreeSql.PostgreSQL.Curd if (identCols.Any() == false) { before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { ret = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _params); @@ -152,13 +152,13 @@ namespace FreeSql.PostgreSQL.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return 0; } sql = string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)); before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); try { long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_connection, _transaction, CommandType.Text, sql, _params)), out ret); @@ -171,7 +171,7 @@ namespace FreeSql.PostgreSQL.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -192,7 +192,7 @@ namespace FreeSql.PostgreSQL.Curd } sql = sb.ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -207,7 +207,7 @@ namespace FreeSql.PostgreSQL.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs index ea1320c7..4d7f248f 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs @@ -47,7 +47,7 @@ namespace FreeSql.PostgreSQL.Curd sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -63,7 +63,7 @@ namespace FreeSql.PostgreSQL.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -139,7 +139,7 @@ namespace FreeSql.PostgreSQL.Curd sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -155,7 +155,7 @@ namespace FreeSql.PostgreSQL.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerDelete.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerDelete.cs index 6548ba9e..175084a9 100644 --- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerDelete.cs +++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerDelete.cs @@ -38,7 +38,7 @@ namespace FreeSql.SqlServer.Curd sql = sb.ToString(); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -53,7 +53,7 @@ namespace FreeSql.SqlServer.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } this.ClearData(); return ret; @@ -84,7 +84,7 @@ namespace FreeSql.SqlServer.Curd sql = sb.ToString(); var dbParms = _params.ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -99,7 +99,7 @@ namespace FreeSql.SqlServer.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } this.ClearData(); return ret; diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs index ba66255e..36dd6f17 100644 --- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs +++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs @@ -38,7 +38,7 @@ namespace FreeSql.SqlServer.Curd sql = string.Concat(sql, "; SELECT SCOPE_IDENTITY();"); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); long ret = 0; Exception exception = null; try @@ -53,7 +53,7 @@ namespace FreeSql.SqlServer.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -89,7 +89,7 @@ namespace FreeSql.SqlServer.Curd sql = sb.ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -104,7 +104,7 @@ namespace FreeSql.SqlServer.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -122,7 +122,7 @@ namespace FreeSql.SqlServer.Curd sql = string.Concat(sql, "; SELECT SCOPE_IDENTITY();"); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); long ret = 0; Exception exception = null; try @@ -137,7 +137,7 @@ namespace FreeSql.SqlServer.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -173,7 +173,7 @@ namespace FreeSql.SqlServer.Curd sql = sb.ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -188,7 +188,7 @@ namespace FreeSql.SqlServer.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs index bfb9e139..d2ea517c 100644 --- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs +++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs @@ -45,7 +45,7 @@ namespace FreeSql.SqlServer.Curd sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -61,7 +61,7 @@ namespace FreeSql.SqlServer.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -129,7 +129,7 @@ namespace FreeSql.SqlServer.Curd sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); var ret = new List(); Exception exception = null; try @@ -145,7 +145,7 @@ namespace FreeSql.SqlServer.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } diff --git a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsert.cs b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsert.cs index b0209b36..d3ac22ba 100644 --- a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsert.cs +++ b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsert.cs @@ -27,7 +27,7 @@ namespace FreeSql.Sqlite.Curd sql = string.Concat(sql, "; SELECT last_insert_rowid();"); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); long ret = 0; Exception exception = null; try @@ -42,7 +42,7 @@ namespace FreeSql.Sqlite.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; } @@ -70,7 +70,7 @@ namespace FreeSql.Sqlite.Curd sql = string.Concat(sql, "; SELECT last_insert_rowid();"); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); - _orm.Aop.CurdBefore?.Invoke(this, before); + _orm.Aop.CurdBeforeHandler?.Invoke(this, before); long ret = 0; Exception exception = null; try @@ -85,7 +85,7 @@ namespace FreeSql.Sqlite.Curd finally { var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfter?.Invoke(this, after); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); } return ret; }