From e823f9dcd0fd0c8a767517ed086b282dd8b4e66c Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Sat, 12 Oct 2019 01:02:42 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20FreeSql.DbContext=20?= =?UTF-8?q?=E5=AE=9E=E4=BD=93=E5=AF=B9=E8=B1=A1=E7=9A=84=E5=8F=98=E5=8C=96?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=EF=BC=9B=20>=20=E6=96=87=E6=A1=A3=EF=BC=9Aht?= =?UTF-8?q?tps://github.com/2881099/FreeSql/wiki/DbContext#%E5%AE%9E%E4%BD?= =?UTF-8?q?%93%E5%8F%98%E5%8C%96%E4%BA%8B%E4%BB%B6=20-=20=E8=A1=A5?= =?UTF-8?q?=E5=85=85=20Aop.CurdBefore=20=E4=BA=8B=E4=BB=B6=E5=8F=82?= =?UTF-8?q?=E6=95=B0=20Table=20=E5=AE=9E=E4=BD=93=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E7=9A=84=E5=85=83=E6=95=B0=E6=8D=AE=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ValuesController.cs | 7 ++- Examples/dbcontext_01/dbcontext_01.csproj | 4 +- FreeSql.DbContext/DbContext/DbContext.cs | 23 +++++++-- FreeSql.DbContext/DbContext/DbContextAsync.cs | 17 +++---- .../DbContext/DbContextOptions.cs | 9 ++++ FreeSql.DbContext/DbContext/DbContextSync.cs | 34 +++++++++----- FreeSql.DbContext/DbSet/DbSet.cs | 4 +- FreeSql.DbContext/DbSet/DbSetAsync.cs | 15 ++++-- FreeSql.DbContext/DbSet/DbSetSync.cs | 17 +++++-- .../Extensions/FreeSqlDbContextExtensions.cs | 6 ++- FreeSql.DbContext/FreeSql.DbContext.xml | 15 ++++++ .../ContextSet/RepositoryDbContext.cs | 32 ++++++++++--- .../Repository/Repository/BaseRepository.cs | 47 +++++++++++++------ FreeSql.DbContext/UnitOfWork/IUnitOfWork.cs | 6 +++ FreeSql.DbContext/UnitOfWork/UnitOfWork.cs | 15 +++++- FreeSql/FreeSql.xml | 5 ++ FreeSql/Interface/IAop.cs | 13 +++-- .../Internal/CommonProvider/DeleteProvider.cs | 4 +- .../Internal/CommonProvider/InsertProvider.cs | 4 +- .../SelectProvider/Select0Provider.cs | 22 ++++----- .../Internal/CommonProvider/UpdateProvider.cs | 4 +- .../Curd/MySqlDelete.cs | 4 +- .../Curd/MySqlInsert.cs | 8 ++-- .../Curd/MySqlUpdate.cs | 4 +- .../Default/Curd/OdbcInsert.cs | 4 +- .../MySql/Curd/OdbcMySqlDelete.cs | 4 +- .../MySql/Curd/OdbcMySqlInsert.cs | 8 ++-- .../MySql/Curd/OdbcMySqlUpdate.cs | 4 +- .../Oracle/Curd/OdbcOracleInsert.cs | 8 ++-- .../PostgreSQL/Curd/OdbcPostgreSQLDelete.cs | 4 +- .../PostgreSQL/Curd/OdbcPostgreSQLInsert.cs | 12 ++--- .../PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs | 4 +- .../SqlServer/Curd/OdbcSqlServerDelete.cs | 4 +- .../SqlServer/Curd/OdbcSqlServerInsert.cs | 8 ++-- .../SqlServer/Curd/OdbcSqlServerUpdate.cs | 4 +- .../Curd/OracleInsert.cs | 8 ++-- .../Curd/PostgreSQLDelete.cs | 4 +- .../Curd/PostgreSQLInsert.cs | 12 ++--- .../Curd/PostgreSQLUpdate.cs | 4 +- .../Curd/SqlServerDelete.cs | 4 +- .../Curd/SqlServerInsert.cs | 8 ++-- .../Curd/SqlServerUpdate.cs | 4 +- .../Curd/SqliteInsert.cs | 4 +- 43 files changed, 285 insertions(+), 146 deletions(-) diff --git a/Examples/dbcontext_01/Controllers/ValuesController.cs b/Examples/dbcontext_01/Controllers/ValuesController.cs index 8d8e4299..3cbb6af6 100644 --- a/Examples/dbcontext_01/Controllers/ValuesController.cs +++ b/Examples/dbcontext_01/Controllers/ValuesController.cs @@ -28,6 +28,11 @@ namespace dbcontext_01.Controllers [HttpGet] async public Task Get() { + _orm.SetDbContextOptions(opt => { + opt.OnEntityChange = changeReport => { + Console.WriteLine(changeReport); + }; + }); long id = 0; @@ -150,7 +155,7 @@ namespace dbcontext_01.Controllers using (var uow = _orm.CreateUnitOfWork()) { - + var reposSong = uow.GetRepository(); reposSong.Where(a => a.Id > 10).ToList(); //查询结果,进入 states diff --git a/Examples/dbcontext_01/dbcontext_01.csproj b/Examples/dbcontext_01/dbcontext_01.csproj index c343f9ed..a90702b5 100644 --- a/Examples/dbcontext_01/dbcontext_01.csproj +++ b/Examples/dbcontext_01/dbcontext_01.csproj @@ -6,8 +6,6 @@ - - @@ -15,7 +13,9 @@ + + diff --git a/FreeSql.DbContext/DbContext/DbContext.cs b/FreeSql.DbContext/DbContext/DbContext.cs index 5aaa2b44..da822e03 100644 --- a/FreeSql.DbContext/DbContext/DbContext.cs +++ b/FreeSql.DbContext/DbContext/DbContext.cs @@ -38,11 +38,20 @@ namespace FreeSql { _optionsPriv = new DbContextOptions(); if (FreeSqlDbContextExtensions._dicSetDbContextOptions.TryGetValue(Orm, out var opt)) + { _optionsPriv.EnableAddOrUpdateNavigateList = opt.EnableAddOrUpdateNavigateList; + _optionsPriv.OnEntityChange = opt.OnEntityChange; + } } return _optionsPriv; } } + internal void EmitOnEntityChange(List report) + { + var oec = UnitOfWork?.OnEntityChange ?? Options.OnEntityChange; + if (oec == null || report == null || report.Any() == false) return; + oec(report); + } #endregion protected DbContext() @@ -146,20 +155,26 @@ namespace FreeSql #endregion #region Queue Action + internal List _entityChangeReport = new List(); + public class EntityChangeInfo + { + public object Object { get; set; } + public EntityChangeType Type { get; set; } + } + public enum EntityChangeType { Insert, Update, Delete, SqlRaw } internal class ExecCommandInfo { - public ExecCommandInfoType actionType { get; set; } + public EntityChangeType changeType { get; set; } public IDbSet dbSet { get; set; } public Type stateType { get; set; } public Type entityType { get; set; } public object state { get; set; } } - internal enum ExecCommandInfoType { Insert, Update, Delete } Queue _actions = new Queue(); internal int _affrows = 0; - internal void EnqueueAction(ExecCommandInfoType actionType, IDbSet dbSet, Type stateType, Type entityType, object state) => - _actions.Enqueue(new ExecCommandInfo { actionType = actionType, dbSet = dbSet, stateType = stateType, entityType = entityType, state = state }); + internal void EnqueueAction(EntityChangeType changeType, IDbSet dbSet, Type stateType, Type entityType, object state) => + _actions.Enqueue(new ExecCommandInfo { changeType = changeType, dbSet = dbSet, stateType = stateType, entityType = entityType, state = state }); #endregion ~DbContext() => this.Dispose(); diff --git a/FreeSql.DbContext/DbContext/DbContextAsync.cs b/FreeSql.DbContext/DbContext/DbContextAsync.cs index cf4bf849..61e6a258 100644 --- a/FreeSql.DbContext/DbContext/DbContextAsync.cs +++ b/FreeSql.DbContext/DbContext/DbContextAsync.cs @@ -13,10 +13,7 @@ namespace FreeSql async public virtual Task SaveChangesAsync() { await ExecCommandAsync(); - UnitOfWork?.Commit(); - var ret = _affrows; - _affrows = 0; - return ret; + return SaveChangesSuccess(); } static Dictionary>>> _dicExecCommandDbContextBetchAsync = new Dictionary>>>(); @@ -96,31 +93,31 @@ namespace FreeSql var isLiveUpdate = false; if (_actions.Any() == false && states.Any() || - info != null && oldinfo.actionType != info.actionType || + info != null && oldinfo.changeType != info.changeType || info != null && oldinfo.stateType != info.stateType || info != null && oldinfo.entityType != info.entityType) { - if (info != null && oldinfo.actionType == info.actionType && oldinfo.stateType == info.stateType && oldinfo.entityType == info.entityType) + if (info != null && oldinfo.changeType == info.changeType && oldinfo.stateType == info.stateType && oldinfo.entityType == info.entityType) { //最后一个,合起来发送 states.Add(info.state); info = null; } - switch (oldinfo.actionType) + switch (oldinfo.changeType) { - case ExecCommandInfoType.Insert: + case EntityChangeType.Insert: await funcInsert(); break; - case ExecCommandInfoType.Delete: + case EntityChangeType.Delete: await funcDelete(); break; } isLiveUpdate = true; } - if (isLiveUpdate || oldinfo.actionType == ExecCommandInfoType.Update) + if (isLiveUpdate || oldinfo.changeType == EntityChangeType.Update) { if (states.Any()) await funcUpdate(isLiveUpdate); diff --git a/FreeSql.DbContext/DbContext/DbContextOptions.cs b/FreeSql.DbContext/DbContext/DbContextOptions.cs index 4841ded3..5c81e9f5 100644 --- a/FreeSql.DbContext/DbContext/DbContextOptions.cs +++ b/FreeSql.DbContext/DbContext/DbContextOptions.cs @@ -1,4 +1,8 @@  +using System; +using System.Collections.Generic; +using System.Linq; + namespace FreeSql { public class DbContextOptions @@ -17,5 +21,10 @@ namespace FreeSql /// - 属性集合不为空时,与数据库存在的关联数据(中间表)完全对比,计算出应该删除和添加的记录 /// public bool EnableAddOrUpdateNavigateList { get; set; } = true; + + /// + /// 实体变化事件 + /// + public Action> OnEntityChange { get; set; } } } diff --git a/FreeSql.DbContext/DbContext/DbContextSync.cs b/FreeSql.DbContext/DbContext/DbContextSync.cs index 3de59884..cbec1023 100644 --- a/FreeSql.DbContext/DbContext/DbContextSync.cs +++ b/FreeSql.DbContext/DbContext/DbContextSync.cs @@ -8,14 +8,26 @@ namespace FreeSql { partial class DbContext { - + int SaveChangesSuccess() + { + UnitOfWork?.Commit(); + int ret; + try + { + EmitOnEntityChange(_entityChangeReport); + } + finally + { + _entityChangeReport.Clear(); + ret = _affrows; + _affrows = 0; + } + return ret; + } public virtual int SaveChanges() { ExecCommand(); - UnitOfWork?.Commit(); - var ret = _affrows; - _affrows = 0; - return ret; + return SaveChangesSuccess(); } static Dictionary>> _dicExecCommandDbContextBetch = new Dictionary>>(); @@ -96,31 +108,31 @@ namespace FreeSql var isLiveUpdate = false; if (_actions.Any() == false && states.Any() || - info != null && oldinfo.actionType != info.actionType || + info != null && oldinfo.changeType != info.changeType || info != null && oldinfo.stateType != info.stateType || info != null && oldinfo.entityType != info.entityType) { - if (info != null && oldinfo.actionType == info.actionType && oldinfo.stateType == info.stateType && oldinfo.entityType == info.entityType) + if (info != null && oldinfo.changeType == info.changeType && oldinfo.stateType == info.stateType && oldinfo.entityType == info.entityType) { //最后一个,合起来发送 states.Add(info.state); info = null; } - switch (oldinfo.actionType) + switch (oldinfo.changeType) { - case ExecCommandInfoType.Insert: + case EntityChangeType.Insert: funcInsert(); break; - case ExecCommandInfoType.Delete: + case EntityChangeType.Delete: funcDelete(); break; } isLiveUpdate = true; } - if (isLiveUpdate || oldinfo.actionType == ExecCommandInfoType.Update) + if (isLiveUpdate || oldinfo.changeType == EntityChangeType.Update) { if (states.Any()) funcUpdate(isLiveUpdate); diff --git a/FreeSql.DbContext/DbSet/DbSet.cs b/FreeSql.DbContext/DbSet/DbSet.cs index 4500ae9b..56651882 100644 --- a/FreeSql.DbContext/DbSet/DbSet.cs +++ b/FreeSql.DbContext/DbSet/DbSet.cs @@ -59,8 +59,8 @@ namespace FreeSql protected virtual IUpdate OrmUpdate(IEnumerable entitys) => _db.Orm.Update().AsType(_entityType).SetSource(entitys).WithTransaction(_uow?.GetOrBeginTransaction()); protected virtual IDelete OrmDelete(object dywhere) => _db.Orm.Delete().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction()).WhereDynamic(dywhere); - internal void EnqueueToDbContext(DbContext.ExecCommandInfoType actionType, EntityState state) => - _db.EnqueueAction(actionType, this, typeof(EntityState), _entityType, state); + internal void EnqueueToDbContext(DbContext.EntityChangeType changeType, EntityState state) => + _db.EnqueueAction(changeType, this, typeof(EntityState), _entityType, state); internal void IncrAffrows(int affrows) => _db._affrows += affrows; diff --git a/FreeSql.DbContext/DbSet/DbSetAsync.cs b/FreeSql.DbContext/DbSet/DbSetAsync.cs index a283061c..cfa2ceb4 100644 --- a/FreeSql.DbContext/DbSet/DbSetAsync.cs +++ b/FreeSql.DbContext/DbSet/DbSetAsync.cs @@ -23,6 +23,7 @@ namespace FreeSql { if (adds.Any() == false) return 0; var affrows = await this.OrmInsert(adds.Select(a => a.Value)).ExecuteAffrowsAsync(); + _db._entityChangeReport.AddRange(adds.Select(a => new DbContext.EntityChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Insert })); return affrows; } @@ -45,6 +46,7 @@ namespace FreeSql var idtval = await this.OrmInsert(data).ExecuteIdentityAsync(); IncrAffrows(1); _db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval); + _db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert }); Attach(data); if (_db.Options.EnableAddOrUpdateNavigateList) await AddOrUpdateNavigateListAsync(data, true); @@ -53,6 +55,7 @@ namespace FreeSql { await DbContextExecCommandAsync(); var newval = (await this.OrmInsert(data).ExecuteInsertedAsync()).First(); + _db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = newval, Type = DbContext.EntityChangeType.Insert }); IncrAffrows(1); _db.Orm.MapEntityValue(_entityType, newval, data); Attach(newval); @@ -67,6 +70,7 @@ namespace FreeSql var idtval = await this.OrmInsert(data).ExecuteIdentityAsync(); IncrAffrows(1); _db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval); + _db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert }); Attach(data); if (_db.Options.EnableAddOrUpdateNavigateList) await AddOrUpdateNavigateListAsync(data, true); @@ -74,7 +78,7 @@ namespace FreeSql return; } } - EnqueueToDbContext(DbContext.ExecCommandInfoType.Insert, CreateEntityState(data)); + EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(data)); Attach(data); if (_db.Options.EnableAddOrUpdateNavigateList) await AddOrUpdateNavigateListAsync(data, true); @@ -100,6 +104,7 @@ namespace FreeSql await DbContextExecCommandAsync(); var rets = await this.OrmInsert(data).ExecuteInsertedAsync(); if (rets.Count != data.Count()) throw new Exception($"特别错误:批量添加失败,{_db.Orm.Ado.DataType} 的返回数据,与添加的数目不匹配"); + _db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeInfo { Object = a, Type = DbContext.EntityChangeType.Insert })); var idx = 0; foreach (var s in data) _db.Orm.MapEntityValue(_entityType, rets[idx++], s); @@ -119,7 +124,7 @@ namespace FreeSql { //进入队列,等待 SaveChanges 时执行 foreach (var item in data) - EnqueueToDbContext(DbContext.ExecCommandInfoType.Insert, CreateEntityState(item)); + EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item)); AttachRange(data); if (_db.Options.EnableAddOrUpdateNavigateList) foreach (var item in data) @@ -193,7 +198,9 @@ namespace FreeSql { var delall = _db.Orm.Delete().AsType(tref.RefMiddleEntityType); foreach (var midWhere in midWheres) delall.Where(midWhere); + var sql = delall.ToSql(); await delall.ExecuteAffrowsAsync(); + _db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw }); } else //保存 { @@ -314,6 +321,7 @@ namespace FreeSql var update = this.OrmUpdate(null).SetSource(updateSource).IgnoreColumns(cuig); var affrows = await update.ExecuteAffrowsAsync(); + _db._entityChangeReport.AddRange(updateSource.Select(a => new DbContext.EntityChangeInfo { Object = a, Type = DbContext.EntityChangeType.Update })); foreach (var newval in data) { @@ -352,7 +360,7 @@ namespace FreeSql var state = CreateEntityState(item); state.OldValue = item; - EnqueueToDbContext(DbContext.ExecCommandInfoType.Update, state); + EnqueueToDbContext(DbContext.EntityChangeType.Update, state); } if (_db.Options.EnableAddOrUpdateNavigateList) foreach (var item in data) @@ -365,6 +373,7 @@ namespace FreeSql { if (dels.Any() == false) return 0; var affrows = await this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrowsAsync(); + _db._entityChangeReport.AddRange(dels.Select(a => new DbContext.EntityChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Delete })); return Math.Max(dels.Length, affrows); } #endregion diff --git a/FreeSql.DbContext/DbSet/DbSetSync.cs b/FreeSql.DbContext/DbSet/DbSetSync.cs index 9d2b46be..2443717f 100644 --- a/FreeSql.DbContext/DbSet/DbSetSync.cs +++ b/FreeSql.DbContext/DbSet/DbSetSync.cs @@ -23,6 +23,7 @@ namespace FreeSql { if (adds.Any() == false) return 0; var affrows = this.OrmInsert(adds.Select(a => a.Value)).ExecuteAffrows(); + _db._entityChangeReport.AddRange(adds.Select(a => new DbContext.EntityChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Insert })); return affrows; } @@ -45,6 +46,7 @@ namespace FreeSql var idtval = this.OrmInsert(data).ExecuteIdentity(); IncrAffrows(1); _db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval); + _db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert }); Attach(data); if (_db.Options.EnableAddOrUpdateNavigateList) AddOrUpdateNavigateList(data, true); @@ -53,6 +55,7 @@ namespace FreeSql { DbContextExecCommand(); var newval = this.OrmInsert(data).ExecuteInserted().First(); + _db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = newval, Type = DbContext.EntityChangeType.Insert }); IncrAffrows(1); _db.Orm.MapEntityValue(_entityType, newval, data); Attach(newval); @@ -67,6 +70,7 @@ namespace FreeSql var idtval = this.OrmInsert(data).ExecuteIdentity(); IncrAffrows(1); _db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval); + _db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert }); Attach(data); if (_db.Options.EnableAddOrUpdateNavigateList) AddOrUpdateNavigateList(data, true); @@ -74,7 +78,7 @@ namespace FreeSql return; } } - EnqueueToDbContext(DbContext.ExecCommandInfoType.Insert, CreateEntityState(data)); + EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(data)); Attach(data); if (_db.Options.EnableAddOrUpdateNavigateList) AddOrUpdateNavigateList(data, true); @@ -104,6 +108,7 @@ namespace FreeSql DbContextExecCommand(); var rets = this.OrmInsert(data).ExecuteInserted(); if (rets.Count != data.Count()) throw new Exception($"特别错误:批量添加失败,{_db.Orm.Ado.DataType} 的返回数据,与添加的数目不匹配"); + _db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeInfo { Object = a, Type = DbContext.EntityChangeType.Insert })); var idx = 0; foreach (var s in data) _db.Orm.MapEntityValue(_entityType, rets[idx++], s); @@ -123,7 +128,7 @@ namespace FreeSql { //进入队列,等待 SaveChanges 时执行 foreach (var item in data) - EnqueueToDbContext(DbContext.ExecCommandInfoType.Insert, CreateEntityState(item)); + EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item)); AttachRange(data); if (_db.Options.EnableAddOrUpdateNavigateList) foreach (var item in data) @@ -203,7 +208,9 @@ namespace FreeSql { var delall = _db.Orm.Delete().AsType(tref.RefMiddleEntityType); foreach (var midWhere in midWheres) delall.Where(midWhere); + var sql = delall.ToSql(); delall.ExecuteAffrows(); + _db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw }); } else //保存 { @@ -324,6 +331,7 @@ namespace FreeSql var update = this.OrmUpdate(null).SetSource(updateSource).IgnoreColumns(cuig); var affrows = update.ExecuteAffrows(); + _db._entityChangeReport.AddRange(updateSource.Select(a => new DbContext.EntityChangeInfo { Object = a, Type = DbContext.EntityChangeType.Update })); foreach (var newval in data) { @@ -368,7 +376,7 @@ namespace FreeSql var state = CreateEntityState(item); state.OldValue = item; - EnqueueToDbContext(DbContext.ExecCommandInfoType.Update, state); + EnqueueToDbContext(DbContext.EntityChangeType.Update, state); } if (_db.Options.EnableAddOrUpdateNavigateList) foreach (var item in data) @@ -381,6 +389,7 @@ namespace FreeSql { if (dels.Any() == false) return 0; var affrows = this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrows(); + _db._entityChangeReport.AddRange(dels.Select(a => new DbContext.EntityChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Delete })); return Math.Max(dels.Length, affrows); } @@ -398,7 +407,7 @@ namespace FreeSql _states.TryRemove(state.Key, out var trystate); _db.Orm.ClearEntityPrimaryValueWithIdentityAndGuid(_entityType, item); - EnqueueToDbContext(DbContext.ExecCommandInfoType.Delete, state); + EnqueueToDbContext(DbContext.EntityChangeType.Delete, state); } } #endregion diff --git a/FreeSql.DbContext/Extensions/FreeSqlDbContextExtensions.cs b/FreeSql.DbContext/Extensions/FreeSqlDbContextExtensions.cs index e1b95f38..b4658e20 100644 --- a/FreeSql.DbContext/Extensions/FreeSqlDbContextExtensions.cs +++ b/FreeSql.DbContext/Extensions/FreeSqlDbContextExtensions.cs @@ -1,6 +1,7 @@ using FreeSql; using System; using System.Collections.Concurrent; +using System.Collections.Generic; public static class FreeSqlDbContextExtensions { @@ -31,12 +32,13 @@ public static class FreeSqlDbContextExtensions /// /// /// - public static void SetDbContextOptions(this IFreeSql that, Action options) + public static IFreeSql SetDbContextOptions(this IFreeSql that, Action options) { - if (options == null) return; + if (options == null) return that; var cfg = _dicSetDbContextOptions.GetOrAdd(that, t => new DbContextOptions()); options(cfg); _dicSetDbContextOptions.AddOrUpdate(that, cfg, (t, o) => cfg); + return that; } internal static ConcurrentDictionary _dicSetDbContextOptions = new ConcurrentDictionary(); } \ No newline at end of file diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index dad2ddeb..9b3a3998 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -60,6 +60,11 @@ - 属性集合不为空时,与数据库存在的关联数据(中间表)完全对比,计算出应该删除和添加的记录 + + + 实体变化事件 + + 动态Type,在使用 DbSet<object> 后使用本方法,指定实体类型 @@ -214,6 +219,16 @@ 开启工作单元 + + + 实体变化事件 + + + + + 工作单元的实体变化记录 + + 创建普通数据上下文档对象 diff --git a/FreeSql.DbContext/Repository/ContextSet/RepositoryDbContext.cs b/FreeSql.DbContext/Repository/ContextSet/RepositoryDbContext.cs index 632a87f7..d18ceb68 100644 --- a/FreeSql.DbContext/Repository/ContextSet/RepositoryDbContext.cs +++ b/FreeSql.DbContext/Repository/ContextSet/RepositoryDbContext.cs @@ -54,19 +54,39 @@ namespace FreeSql }); } + int SaveChangesSuccess() + { + int ret; + try + { + if (UnitOfWork == null) EmitOnEntityChange(_entityChangeReport); + else + { + var uow = UnitOfWork as UnitOfWork; + if (uow != null) + { + uow.EntityChangeReport.AddRange(_entityChangeReport); + if (uow.OnEntityChange == null) uow.OnEntityChange = Options.OnEntityChange; + } + } + } + finally + { + _entityChangeReport.Clear(); + ret = _affrows; + _affrows = 0; + } + return ret; + } public override int SaveChanges() { ExecCommand(); - var ret = _affrows; - _affrows = 0; - return ret; + return SaveChangesSuccess(); } async public override Task SaveChangesAsync() { await ExecCommandAsync(); - var ret = _affrows; - _affrows = 0; - return ret; + return SaveChangesSuccess(); } } } diff --git a/FreeSql.DbContext/Repository/Repository/BaseRepository.cs b/FreeSql.DbContext/Repository/Repository/BaseRepository.cs index f7775429..ea7dfa67 100644 --- a/FreeSql.DbContext/Repository/Repository/BaseRepository.cs +++ b/FreeSql.DbContext/Repository/Repository/BaseRepository.cs @@ -1,4 +1,5 @@ -using System; +using FreeSql.Extensions.EntityUtil; +using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; @@ -69,8 +70,22 @@ namespace FreeSql public ISelect Where(Expression> exp) => _dbset.OrmSelectInternal(null).Where(exp); public ISelect WhereIf(bool condition, Expression> exp) => _dbset.OrmSelectInternal(null).WhereIf(condition, exp); - public int Delete(Expression> predicate) => _dbset.OrmDeleteInternal(null).Where(predicate).ExecuteAffrows(); - public Task DeleteAsync(Expression> predicate) => _dbset.OrmDeleteInternal(null).Where(predicate).ExecuteAffrowsAsync(); + public int Delete(Expression> predicate) + { + var delete = _dbset.OrmDeleteInternal(null).Where(predicate); + var sql = delete.ToSql(); + var affrows = delete.ExecuteAffrows(); + _db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw }); + return affrows; + } + async public Task DeleteAsync(Expression> predicate) + { + var delete = _dbset.OrmDeleteInternal(null).Where(predicate); + var sql = delete.ToSql(); + var affrows = await delete.ExecuteAffrowsAsync(); + _db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw }); + return affrows; + } public int Delete(TEntity entity) { @@ -170,21 +185,23 @@ namespace FreeSql { } - public int Delete(TKey id) + TEntity CheckTKeyAndReturnIdEntity(TKey id) { - var stateKey = string.Concat(id); - _dbset._statesInternal.TryRemove(stateKey, out var trystate); - return _dbset.OrmDeleteInternal(id).ExecuteAffrows(); - } - public Task DeleteAsync(TKey id) - { - var stateKey = string.Concat(id); - _dbset._statesInternal.TryRemove(stateKey, out var trystate); - return _dbset.OrmDeleteInternal(id).ExecuteAffrowsAsync(); + var tb = _db.Orm.CodeFirst.GetTableByEntity(EntityType); + if (tb.Primarys.Length != 1) throw new Exception($"实体类型 {EntityType.Name} 主键数量不为 1,无法使用该方法"); + if (tb.Primarys[0].CsType.NullableTypeOrThis() != typeof(TKey).NullableTypeOrThis()) throw new Exception($"实体类型 {EntityType.Name} 主键类型不为 {typeof(TKey).FullName},无法使用该方法"); + var obj = Activator.CreateInstance(tb.Type); + _db.Orm.SetEntityValueWithPropertyName(tb.Type, obj, tb.Primarys[0].CsName, id); + var ret = obj as TEntity; + if (ret == null) throw new Exception($"实体类型 {EntityType.Name} 无法转换为 {typeof(TEntity).Name},无法使用该方法"); + return ret; } - public TEntity Find(TKey id) => _dbset.OrmSelectInternal(id).ToOne(); - public Task FindAsync(TKey id) => _dbset.OrmSelectInternal(id).ToOneAsync(); + public int Delete(TKey id) => Delete(CheckTKeyAndReturnIdEntity(id)); + public Task DeleteAsync(TKey id) => DeleteAsync(CheckTKeyAndReturnIdEntity(id)); + + public TEntity Find(TKey id) => _dbset.OrmSelectInternal(CheckTKeyAndReturnIdEntity(id)).ToOne(); + public Task FindAsync(TKey id) => _dbset.OrmSelectInternal(CheckTKeyAndReturnIdEntity(id)).ToOneAsync(); public TEntity Get(TKey id) => Find(id); public Task GetAsync(TKey id) => FindAsync(id); diff --git a/FreeSql.DbContext/UnitOfWork/IUnitOfWork.cs b/FreeSql.DbContext/UnitOfWork/IUnitOfWork.cs index ca1a7acd..f5c77638 100644 --- a/FreeSql.DbContext/UnitOfWork/IUnitOfWork.cs +++ b/FreeSql.DbContext/UnitOfWork/IUnitOfWork.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Data; using System.Data.Common; @@ -32,5 +33,10 @@ namespace FreeSql /// 开启工作单元 /// void Open(); + + /// + /// 实体变化事件 + /// + Action> OnEntityChange { get; set; } } } diff --git a/FreeSql.DbContext/UnitOfWork/UnitOfWork.cs b/FreeSql.DbContext/UnitOfWork/UnitOfWork.cs index 493c9bf5..9167368c 100644 --- a/FreeSql.DbContext/UnitOfWork/UnitOfWork.cs +++ b/FreeSql.DbContext/UnitOfWork/UnitOfWork.cs @@ -1,5 +1,6 @@ using SafeObjectPool; using System; +using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Threading; @@ -32,6 +33,7 @@ namespace FreeSql #if ns20 Current.Value = null; #endif + EntityChangeReport.Clear(); } public bool Enable { get; private set; } = true; @@ -76,7 +78,11 @@ namespace FreeSql { try { - if (_tran != null) _tran.Commit(); + if (_tran != null) + { + _tran.Commit(); + OnEntityChange?.Invoke(EntityChangeReport); + } } finally { @@ -94,6 +100,13 @@ namespace FreeSql ReturnObject(); } } + + public Action> OnEntityChange { get; set; } + /// + /// 工作单元的实体变化记录 + /// + public List EntityChangeReport { get; } = new List(); + ~UnitOfWork() { this.Dispose(); diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 6ae63c12..53d85f09 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -2215,6 +2215,11 @@ 实体类型 + + + 实体类型的元数据 + + 执行的 SQL diff --git a/FreeSql/Interface/IAop.cs b/FreeSql/Interface/IAop.cs index cb8a4043..c1c5c3f4 100644 --- a/FreeSql/Interface/IAop.cs +++ b/FreeSql/Interface/IAop.cs @@ -151,16 +151,17 @@ namespace FreeSql.Aop public class CurdBeforeEventArgs : EventArgs { - public CurdBeforeEventArgs(Type entityType, CurdType curdType, string sql, DbParameter[] dbParms) : - this(Guid.NewGuid(), new Stopwatch(), entityType, curdType, sql, dbParms) + public CurdBeforeEventArgs(Type entityType, TableInfo table, CurdType curdType, string sql, DbParameter[] dbParms) : + this(Guid.NewGuid(), new Stopwatch(), entityType, table, curdType, sql, dbParms) { this.Stopwatch.Start(); } - protected CurdBeforeEventArgs(Guid identifier, Stopwatch stopwatch, Type entityType, CurdType curdType, string sql, DbParameter[] dbParms) + protected CurdBeforeEventArgs(Guid identifier, Stopwatch stopwatch, Type entityType, TableInfo table, CurdType curdType, string sql, DbParameter[] dbParms) { this.Identifier = identifier; this.Stopwatch = stopwatch; this.EntityType = entityType; + this.Table = table; this.CurdType = curdType; this.Sql = sql; this.DbParms = dbParms; @@ -181,6 +182,10 @@ namespace FreeSql.Aop /// public Type EntityType { get; } /// + /// 实体类型的元数据 + /// + public TableInfo Table { get; set; } + /// /// 执行的 SQL /// public string Sql { get; } @@ -193,7 +198,7 @@ namespace FreeSql.Aop public class CurdAfterEventArgs : CurdBeforeEventArgs { public CurdAfterEventArgs(CurdBeforeEventArgs before, Exception exception, object executeResult) : - base(before.Identifier, before.StopwatchInternal, before.EntityType, before.CurdType, before.Sql, before.DbParms) + base(before.Identifier, before.StopwatchInternal, before.EntityType, before.Table, before.CurdType, before.Sql, before.DbParms) { this.Exception = exception; this.ExecuteResult = executeResult; diff --git a/FreeSql/Internal/CommonProvider/DeleteProvider.cs b/FreeSql/Internal/CommonProvider/DeleteProvider.cs index 8366cde9..45af15e9 100644 --- a/FreeSql/Internal/CommonProvider/DeleteProvider.cs +++ b/FreeSql/Internal/CommonProvider/DeleteProvider.cs @@ -58,7 +58,7 @@ namespace FreeSql.Internal.CommonProvider var sql = this.ToSql(); if (string.IsNullOrEmpty(sql)) return 0; var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var affrows = 0; Exception exception = null; @@ -84,7 +84,7 @@ namespace FreeSql.Internal.CommonProvider var sql = this.ToSql(); if (string.IsNullOrEmpty(sql)) return 0; var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var affrows = 0; Exception exception = null; diff --git a/FreeSql/Internal/CommonProvider/InsertProvider.cs b/FreeSql/Internal/CommonProvider/InsertProvider.cs index c425d379..a6e65ed5 100644 --- a/FreeSql/Internal/CommonProvider/InsertProvider.cs +++ b/FreeSql/Internal/CommonProvider/InsertProvider.cs @@ -488,7 +488,7 @@ namespace FreeSql.Internal.CommonProvider protected int RawExecuteAffrows() { var sql = ToSql(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); var affrows = 0; Exception exception = null; @@ -511,7 +511,7 @@ namespace FreeSql.Internal.CommonProvider async protected Task RawExecuteAffrowsAsync() { var sql = ToSql(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); var affrows = 0; Exception exception = null; diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs index 6ad66981..2a1b90d3 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs @@ -265,7 +265,7 @@ namespace FreeSql.Internal.CommonProvider { var sql = this.ToSql(field); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, Aop.CurdType.Select, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); DataTable ret = null; Exception exception = null; @@ -289,7 +289,7 @@ namespace FreeSql.Internal.CommonProvider { var sql = this.ToSql(field); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, Aop.CurdType.Select, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); DataTable ret = null; Exception exception = null; @@ -315,7 +315,7 @@ namespace FreeSql.Internal.CommonProvider var sql = this.ToSql(field); var type = typeof(TTuple); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, Aop.CurdType.Select, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); var flagStr = $"ToListField:{field}"; @@ -345,7 +345,7 @@ namespace FreeSql.Internal.CommonProvider var sql = this.ToSql(field); var type = typeof(TTuple); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, Aop.CurdType.Select, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); var flagStr = $"ToListField:{field}"; @@ -374,7 +374,7 @@ namespace FreeSql.Internal.CommonProvider internal List ToListAfPrivate(string sql, GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List retlist)[] otherData) { var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, Aop.CurdType.Select, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -409,7 +409,7 @@ namespace FreeSql.Internal.CommonProvider async internal Task> ToListAfPrivateAsync(string sql, GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List retlist)[] otherData) { var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, Aop.CurdType.Select, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -476,7 +476,7 @@ namespace FreeSql.Internal.CommonProvider internal void ToListAfChunkPrivate(int chunkSize, Action> chunkDone, string sql, GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List retlist)[] otherData) { var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, Aop.CurdType.Select, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); var retCount = 0; @@ -579,7 +579,7 @@ namespace FreeSql.Internal.CommonProvider var sql = this.ToSql(af.field); var type = typeof(TReturn); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, Aop.CurdType.Select, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -610,7 +610,7 @@ namespace FreeSql.Internal.CommonProvider var sql = this.ToSql(af.field); var type = typeof(TReturn); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, Aop.CurdType.Select, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -1088,7 +1088,7 @@ namespace FreeSql.Internal.CommonProvider { var sql = this.InternalToSql(select); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, Aop.CurdType.Select, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); DataTable ret = null; Exception exception = null; @@ -1112,7 +1112,7 @@ namespace FreeSql.Internal.CommonProvider { var sql = this.InternalToSql(select); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, Aop.CurdType.Select, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); DataTable ret = null; Exception exception = null; diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs index b021f6b1..14709887 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs @@ -325,7 +325,7 @@ namespace FreeSql.Internal.CommonProvider var sql = this.ToSql(); if (string.IsNullOrEmpty(sql)) return 0; var dbParms = _params.Concat(_paramsSource).ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var affrows = 0; Exception exception = null; @@ -351,7 +351,7 @@ namespace FreeSql.Internal.CommonProvider var sql = this.ToSql(); if (string.IsNullOrEmpty(sql)) return 0; var dbParms = _params.Concat(_paramsSource).ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var affrows = 0; Exception exception = null; diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlDelete.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlDelete.cs index 2b63f5b6..f3679435 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlDelete.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlDelete.cs @@ -32,7 +32,7 @@ namespace FreeSql.MySql.Curd } sql = sb.ToString(); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -70,7 +70,7 @@ namespace FreeSql.MySql.Curd } sql = sb.ToString(); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs index ab8df3c2..64f9a0c8 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs @@ -29,7 +29,7 @@ namespace FreeSql.MySql.Curd if (string.IsNullOrEmpty(sql)) return 0; sql = string.Concat(sql, "; SELECT LAST_INSERT_ID();"); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); long ret = 0; Exception exception = null; @@ -55,7 +55,7 @@ namespace FreeSql.MySql.Curd if (string.IsNullOrEmpty(sql)) return 0; sql = string.Concat(sql, "; SELECT LAST_INSERT_ID();"); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); long ret = 0; Exception exception = null; @@ -91,7 +91,7 @@ namespace FreeSql.MySql.Curd ++colidx; } sql = sb.ToString(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -127,7 +127,7 @@ namespace FreeSql.MySql.Curd ++colidx; } sql = sb.ToString(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs index 4b820e1c..e3749b0a 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs @@ -41,7 +41,7 @@ namespace FreeSql.MySql.Curd } sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -79,7 +79,7 @@ namespace FreeSql.MySql.Curd } sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; diff --git a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcInsert.cs b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcInsert.cs index 9b3e7f54..f7c68d8f 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcInsert.cs @@ -32,7 +32,7 @@ namespace FreeSql.Odbc.Default if (string.IsNullOrEmpty(sql)) return 0; Object poolConn = null; - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, string.Concat(sql, $"; {_utils.Adapter.InsertAfterGetIdentitySql}"), _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, string.Concat(sql, $"; {_utils.Adapter.InsertAfterGetIdentitySql}"), _params); _orm.Aop.CurdBefore?.Invoke(this, before); long ret = 0; Exception exception = null; @@ -69,7 +69,7 @@ namespace FreeSql.Odbc.Default if (string.IsNullOrEmpty(sql)) return 0; Object poolConn = null; - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, string.Concat(sql, $"; {_utils.Adapter.InsertAfterGetIdentitySql}"), _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, string.Concat(sql, $"; {_utils.Adapter.InsertAfterGetIdentitySql}"), _params); _orm.Aop.CurdBefore?.Invoke(this, before); long ret = 0; Exception exception = null; diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlDelete.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlDelete.cs index 1d19cd89..84d7b968 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlDelete.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlDelete.cs @@ -32,7 +32,7 @@ namespace FreeSql.Odbc.MySql } sql = sb.ToString(); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -70,7 +70,7 @@ namespace FreeSql.Odbc.MySql } sql = sb.ToString(); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsert.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsert.cs index d48ce6ca..cba7443d 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsert.cs @@ -31,7 +31,7 @@ namespace FreeSql.Odbc.MySql if (string.IsNullOrEmpty(sql)) return 0; Object poolConn = null; - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, string.Concat(sql, "; SELECT LAST_INSERT_ID();"), _params); + 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); long ret = 0; Exception exception = null; @@ -68,7 +68,7 @@ namespace FreeSql.Odbc.MySql if (string.IsNullOrEmpty(sql)) return 0; Object poolConn = null; - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, string.Concat(sql, "; SELECT LAST_INSERT_ID();"), _params); + 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); long ret = 0; Exception exception = null; @@ -115,7 +115,7 @@ namespace FreeSql.Odbc.MySql ++colidx; } sql = sb.ToString(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -151,7 +151,7 @@ namespace FreeSql.Odbc.MySql ++colidx; } sql = sb.ToString(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs index 2179e2af..35d854d3 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs @@ -41,7 +41,7 @@ namespace FreeSql.Odbc.MySql } sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -79,7 +79,7 @@ namespace FreeSql.Odbc.MySql } sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs index 8ca161d9..d74d87d2 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs @@ -95,7 +95,7 @@ namespace FreeSql.Odbc.Oracle if (_identCol == null || _source.Count > 1) { - before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); try { @@ -118,7 +118,7 @@ namespace FreeSql.Odbc.Oracle identParam.Direction = ParameterDirection.Output; sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}"; var dbParms = _params.Concat(new[] { identParam }).ToArray(); - before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, dbParms); + before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); try { @@ -148,7 +148,7 @@ namespace FreeSql.Odbc.Oracle if (_identCol == null || _source.Count > 1) { - before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); try { @@ -171,7 +171,7 @@ namespace FreeSql.Odbc.Oracle identParam.Direction = ParameterDirection.Output; sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}"; var dbParms = _params.Concat(new[] { identParam }).ToArray(); - before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, dbParms); + before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); try { diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLDelete.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLDelete.cs index f9feba9e..a9039ebe 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLDelete.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLDelete.cs @@ -32,7 +32,7 @@ namespace FreeSql.Odbc.PostgreSQL } sql = sb.ToString(); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -70,7 +70,7 @@ namespace FreeSql.Odbc.PostgreSQL } sql = sb.ToString(); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLInsert.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLInsert.cs index ef447d69..430285a9 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLInsert.cs @@ -36,7 +36,7 @@ namespace FreeSql.Odbc.PostgreSQL var identCols = _table.Columns.Where(a => a.Value.Attribute.IsIdentity == true); if (identCols.Any() == false) { - before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); try { @@ -55,7 +55,7 @@ namespace FreeSql.Odbc.PostgreSQL return 0; } sql = string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)); - before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); try { @@ -85,7 +85,7 @@ namespace FreeSql.Odbc.PostgreSQL var identCols = _table.Columns.Where(a => a.Value.Attribute.IsIdentity == true); if (identCols.Any() == false) { - before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); try { @@ -104,7 +104,7 @@ namespace FreeSql.Odbc.PostgreSQL return 0; } sql = string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)); - before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); try { @@ -139,7 +139,7 @@ namespace FreeSql.Odbc.PostgreSQL ++colidx; } sql = sb.ToString(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -175,7 +175,7 @@ namespace FreeSql.Odbc.PostgreSQL ++colidx; } sql = sb.ToString(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs index 2ad90e96..6aab35a3 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs @@ -41,7 +41,7 @@ namespace FreeSql.Odbc.PostgreSQL } sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -79,7 +79,7 @@ namespace FreeSql.Odbc.PostgreSQL } sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerDelete.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerDelete.cs index 68a16b50..6134d2a9 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerDelete.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerDelete.cs @@ -37,7 +37,7 @@ namespace FreeSql.Odbc.SqlServer sql = sb.ToString(); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -80,7 +80,7 @@ namespace FreeSql.Odbc.SqlServer sql = sb.ToString(); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs index 8a9cc4ea..986df69e 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs @@ -31,7 +31,7 @@ namespace FreeSql.Odbc.SqlServer if (string.IsNullOrEmpty(sql)) return 0; sql = string.Concat(sql, "; SELECT SCOPE_IDENTITY();"); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); long ret = 0; Exception exception = null; @@ -57,7 +57,7 @@ namespace FreeSql.Odbc.SqlServer if (string.IsNullOrEmpty(sql)) return 0; sql = string.Concat(sql, "; SELECT SCOPE_IDENTITY();"); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); long ret = 0; Exception exception = null; @@ -99,7 +99,7 @@ namespace FreeSql.Odbc.SqlServer sb.Append(sql.Substring(validx + 1)); sql = sb.ToString(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -140,7 +140,7 @@ namespace FreeSql.Odbc.SqlServer sb.Append(sql.Substring(validx + 1)); sql = sb.ToString(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs index 8c19325c..bd0befb5 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs @@ -46,7 +46,7 @@ namespace FreeSql.Odbc.SqlServer sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -89,7 +89,7 @@ namespace FreeSql.Odbc.SqlServer sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; diff --git a/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs b/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs index 345fc384..03ab37b1 100644 --- a/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs +++ b/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs @@ -96,7 +96,7 @@ namespace FreeSql.Oracle.Curd if (_identCol == null || _source.Count > 1) { - before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); try { @@ -119,7 +119,7 @@ namespace FreeSql.Oracle.Curd identParam.Direction = ParameterDirection.Output; sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}"; var dbParms = _params.Concat(new[] { identParam }).ToArray(); - before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, dbParms); + before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); try { @@ -149,7 +149,7 @@ namespace FreeSql.Oracle.Curd if (_identCol == null || _source.Count > 1) { - before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); try { @@ -172,7 +172,7 @@ namespace FreeSql.Oracle.Curd identParam.Direction = ParameterDirection.Output; sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}"; var dbParms = _params.Concat(new[] { identParam }).ToArray(); - before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, dbParms); + before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); try { diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLDelete.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLDelete.cs index 251cc918..f2b40940 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLDelete.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLDelete.cs @@ -32,7 +32,7 @@ namespace FreeSql.PostgreSQL.Curd } sql = sb.ToString(); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -70,7 +70,7 @@ namespace FreeSql.PostgreSQL.Curd } sql = sb.ToString(); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLInsert.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLInsert.cs index b9ee9379..bb5ef651 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLInsert.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLInsert.cs @@ -36,7 +36,7 @@ namespace FreeSql.PostgreSQL.Curd var identCols = _table.Columns.Where(a => a.Value.Attribute.IsIdentity == true); if (identCols.Any() == false) { - before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); try { @@ -55,7 +55,7 @@ namespace FreeSql.PostgreSQL.Curd return 0; } sql = string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)); - before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); try { @@ -85,7 +85,7 @@ namespace FreeSql.PostgreSQL.Curd var identCols = _table.Columns.Where(a => a.Value.Attribute.IsIdentity == true); if (identCols.Any() == false) { - before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); try { @@ -104,7 +104,7 @@ namespace FreeSql.PostgreSQL.Curd return 0; } sql = string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)); - before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); try { @@ -139,7 +139,7 @@ namespace FreeSql.PostgreSQL.Curd ++colidx; } sql = sb.ToString(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -175,7 +175,7 @@ namespace FreeSql.PostgreSQL.Curd ++colidx; } sql = sb.ToString(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs index b1fc6740..62343660 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs @@ -41,7 +41,7 @@ namespace FreeSql.PostgreSQL.Curd } sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -79,7 +79,7 @@ namespace FreeSql.PostgreSQL.Curd } sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerDelete.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerDelete.cs index b227068f..df944cc1 100644 --- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerDelete.cs +++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerDelete.cs @@ -37,7 +37,7 @@ namespace FreeSql.SqlServer.Curd sql = sb.ToString(); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -80,7 +80,7 @@ namespace FreeSql.SqlServer.Curd sql = sb.ToString(); var dbParms = _params.ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs index 9210ee7f..46534b12 100644 --- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs +++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs @@ -31,7 +31,7 @@ namespace FreeSql.SqlServer.Curd if (string.IsNullOrEmpty(sql)) return 0; sql = string.Concat(sql, "; SELECT SCOPE_IDENTITY();"); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); long ret = 0; Exception exception = null; @@ -57,7 +57,7 @@ namespace FreeSql.SqlServer.Curd if (string.IsNullOrEmpty(sql)) return 0; sql = string.Concat(sql, "; SELECT SCOPE_IDENTITY();"); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); long ret = 0; Exception exception = null; @@ -99,7 +99,7 @@ namespace FreeSql.SqlServer.Curd sb.Append(sql.Substring(validx + 1)); sql = sb.ToString(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -140,7 +140,7 @@ namespace FreeSql.SqlServer.Curd sb.Append(sql.Substring(validx + 1)); sql = sb.ToString(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs index 8827213d..a8944a6c 100644 --- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs +++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs @@ -46,7 +46,7 @@ namespace FreeSql.SqlServer.Curd sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; @@ -89,7 +89,7 @@ namespace FreeSql.SqlServer.Curd sql = sb.ToString(); var dbParms = _params.Concat(_paramsSource).ToArray(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBefore?.Invoke(this, before); var ret = new List(); Exception exception = null; diff --git a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsert.cs b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsert.cs index 7fc0e3b9..8c09083b 100644 --- a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsert.cs +++ b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsert.cs @@ -30,7 +30,7 @@ namespace FreeSql.Sqlite.Curd if (string.IsNullOrEmpty(sql)) return 0; sql = string.Concat(sql, "; SELECT last_insert_rowid();"); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); long ret = 0; Exception exception = null; @@ -56,7 +56,7 @@ namespace FreeSql.Sqlite.Curd if (string.IsNullOrEmpty(sql)) return 0; sql = string.Concat(sql, "; SELECT last_insert_rowid();"); - var before = new Aop.CurdBeforeEventArgs(_table.Type, Aop.CurdType.Insert, sql, _params); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBefore?.Invoke(this, before); long ret = 0; Exception exception = null;