- 增加 FreeSql.DbContext 实体对象的变化事件;

> 文档:https://github.com/2881099/FreeSql/wiki/DbContext#%E5%AE%9E%E4%BD%93%E5%8F%98%E5%8C%96%E4%BA%8B%E4%BB%B6
- 补充 Aop.CurdBefore 事件参数 Table 实体类型的元数据;
This commit is contained in:
28810 2019-10-12 01:02:42 +08:00
parent 9a8d51da50
commit e823f9dcd0
43 changed files with 285 additions and 146 deletions

View File

@ -28,6 +28,11 @@ namespace dbcontext_01.Controllers
[HttpGet] [HttpGet]
async public Task<string> Get() async public Task<string> Get()
{ {
_orm.SetDbContextOptions(opt => {
opt.OnEntityChange = changeReport => {
Console.WriteLine(changeReport);
};
});
long id = 0; long id = 0;

View File

@ -6,8 +6,6 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="FreeSql.Extensions.LazyLoading" Version="0.10.2" />
<PackageReference Include="FreeSql.Provider.Sqlite" Version="0.10.2" />
<PackageReference Include="Microsoft.AspNetCore.App" /> <PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="4.0.1" /> <PackageReference Include="Swashbuckle.AspNetCore" Version="4.0.1" />
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="4.0.1" /> <PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="4.0.1" />
@ -15,7 +13,9 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\Extensions\FreeSql.Extensions.LazyLoading\FreeSql.Extensions.LazyLoading.csproj" />
<ProjectReference Include="..\..\FreeSql.DbContext\FreeSql.DbContext.csproj" /> <ProjectReference Include="..\..\FreeSql.DbContext\FreeSql.DbContext.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.Sqlite\FreeSql.Provider.Sqlite.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -38,11 +38,20 @@ namespace FreeSql
{ {
_optionsPriv = new DbContextOptions(); _optionsPriv = new DbContextOptions();
if (FreeSqlDbContextExtensions._dicSetDbContextOptions.TryGetValue(Orm, out var opt)) if (FreeSqlDbContextExtensions._dicSetDbContextOptions.TryGetValue(Orm, out var opt))
{
_optionsPriv.EnableAddOrUpdateNavigateList = opt.EnableAddOrUpdateNavigateList; _optionsPriv.EnableAddOrUpdateNavigateList = opt.EnableAddOrUpdateNavigateList;
_optionsPriv.OnEntityChange = opt.OnEntityChange;
}
} }
return _optionsPriv; return _optionsPriv;
} }
} }
internal void EmitOnEntityChange(List<DbContext.EntityChangeInfo> report)
{
var oec = UnitOfWork?.OnEntityChange ?? Options.OnEntityChange;
if (oec == null || report == null || report.Any() == false) return;
oec(report);
}
#endregion #endregion
protected DbContext() protected DbContext()
@ -146,20 +155,26 @@ namespace FreeSql
#endregion #endregion
#region Queue Action #region Queue Action
internal List<EntityChangeInfo> _entityChangeReport = new List<EntityChangeInfo>();
public class EntityChangeInfo
{
public object Object { get; set; }
public EntityChangeType Type { get; set; }
}
public enum EntityChangeType { Insert, Update, Delete, SqlRaw }
internal class ExecCommandInfo internal class ExecCommandInfo
{ {
public ExecCommandInfoType actionType { get; set; } public EntityChangeType changeType { get; set; }
public IDbSet dbSet { get; set; } public IDbSet dbSet { get; set; }
public Type stateType { get; set; } public Type stateType { get; set; }
public Type entityType { get; set; } public Type entityType { get; set; }
public object state { get; set; } public object state { get; set; }
} }
internal enum ExecCommandInfoType { Insert, Update, Delete }
Queue<ExecCommandInfo> _actions = new Queue<ExecCommandInfo>(); Queue<ExecCommandInfo> _actions = new Queue<ExecCommandInfo>();
internal int _affrows = 0; internal int _affrows = 0;
internal void EnqueueAction(ExecCommandInfoType actionType, IDbSet dbSet, Type stateType, Type entityType, object state) => internal void EnqueueAction(EntityChangeType changeType, IDbSet dbSet, Type stateType, Type entityType, object state) =>
_actions.Enqueue(new ExecCommandInfo { actionType = actionType, dbSet = dbSet, stateType = stateType, entityType = entityType, state = state }); _actions.Enqueue(new ExecCommandInfo { changeType = changeType, dbSet = dbSet, stateType = stateType, entityType = entityType, state = state });
#endregion #endregion
~DbContext() => this.Dispose(); ~DbContext() => this.Dispose();

View File

@ -13,10 +13,7 @@ namespace FreeSql
async public virtual Task<int> SaveChangesAsync() async public virtual Task<int> SaveChangesAsync()
{ {
await ExecCommandAsync(); await ExecCommandAsync();
UnitOfWork?.Commit(); return SaveChangesSuccess();
var ret = _affrows;
_affrows = 0;
return ret;
} }
static Dictionary<Type, Dictionary<string, Func<object, object[], Task<int>>>> _dicExecCommandDbContextBetchAsync = new Dictionary<Type, Dictionary<string, Func<object, object[], Task<int>>>>(); static Dictionary<Type, Dictionary<string, Func<object, object[], Task<int>>>> _dicExecCommandDbContextBetchAsync = new Dictionary<Type, Dictionary<string, Func<object, object[], Task<int>>>>();
@ -96,31 +93,31 @@ namespace FreeSql
var isLiveUpdate = false; var isLiveUpdate = false;
if (_actions.Any() == false && states.Any() || 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.stateType != info.stateType ||
info != null && oldinfo.entityType != info.entityType) 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); states.Add(info.state);
info = null; info = null;
} }
switch (oldinfo.actionType) switch (oldinfo.changeType)
{ {
case ExecCommandInfoType.Insert: case EntityChangeType.Insert:
await funcInsert(); await funcInsert();
break; break;
case ExecCommandInfoType.Delete: case EntityChangeType.Delete:
await funcDelete(); await funcDelete();
break; break;
} }
isLiveUpdate = true; isLiveUpdate = true;
} }
if (isLiveUpdate || oldinfo.actionType == ExecCommandInfoType.Update) if (isLiveUpdate || oldinfo.changeType == EntityChangeType.Update)
{ {
if (states.Any()) if (states.Any())
await funcUpdate(isLiveUpdate); await funcUpdate(isLiveUpdate);

View File

@ -1,4 +1,8 @@
 
using System;
using System.Collections.Generic;
using System.Linq;
namespace FreeSql namespace FreeSql
{ {
public class DbContextOptions public class DbContextOptions
@ -17,5 +21,10 @@ namespace FreeSql
/// - 属性集合不为空时,与数据库存在的关联数据(中间表)完全对比,计算出应该删除和添加的记录 /// - 属性集合不为空时,与数据库存在的关联数据(中间表)完全对比,计算出应该删除和添加的记录
/// </summary> /// </summary>
public bool EnableAddOrUpdateNavigateList { get; set; } = true; public bool EnableAddOrUpdateNavigateList { get; set; } = true;
/// <summary>
/// 实体变化事件
/// </summary>
public Action<List<DbContext.EntityChangeInfo>> OnEntityChange { get; set; }
} }
} }

View File

@ -8,14 +8,26 @@ namespace FreeSql
{ {
partial class DbContext 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() public virtual int SaveChanges()
{ {
ExecCommand(); ExecCommand();
UnitOfWork?.Commit(); return SaveChangesSuccess();
var ret = _affrows;
_affrows = 0;
return ret;
} }
static Dictionary<Type, Dictionary<string, Func<object, object[], int>>> _dicExecCommandDbContextBetch = new Dictionary<Type, Dictionary<string, Func<object, object[], int>>>(); static Dictionary<Type, Dictionary<string, Func<object, object[], int>>> _dicExecCommandDbContextBetch = new Dictionary<Type, Dictionary<string, Func<object, object[], int>>>();
@ -96,31 +108,31 @@ namespace FreeSql
var isLiveUpdate = false; var isLiveUpdate = false;
if (_actions.Any() == false && states.Any() || 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.stateType != info.stateType ||
info != null && oldinfo.entityType != info.entityType) 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); states.Add(info.state);
info = null; info = null;
} }
switch (oldinfo.actionType) switch (oldinfo.changeType)
{ {
case ExecCommandInfoType.Insert: case EntityChangeType.Insert:
funcInsert(); funcInsert();
break; break;
case ExecCommandInfoType.Delete: case EntityChangeType.Delete:
funcDelete(); funcDelete();
break; break;
} }
isLiveUpdate = true; isLiveUpdate = true;
} }
if (isLiveUpdate || oldinfo.actionType == ExecCommandInfoType.Update) if (isLiveUpdate || oldinfo.changeType == EntityChangeType.Update)
{ {
if (states.Any()) if (states.Any())
funcUpdate(isLiveUpdate); funcUpdate(isLiveUpdate);

View File

@ -59,8 +59,8 @@ namespace FreeSql
protected virtual IUpdate<TEntity> OrmUpdate(IEnumerable<TEntity> entitys) => _db.Orm.Update<TEntity>().AsType(_entityType).SetSource(entitys).WithTransaction(_uow?.GetOrBeginTransaction()); protected virtual IUpdate<TEntity> OrmUpdate(IEnumerable<TEntity> entitys) => _db.Orm.Update<TEntity>().AsType(_entityType).SetSource(entitys).WithTransaction(_uow?.GetOrBeginTransaction());
protected virtual IDelete<TEntity> OrmDelete(object dywhere) => _db.Orm.Delete<TEntity>().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction()).WhereDynamic(dywhere); protected virtual IDelete<TEntity> OrmDelete(object dywhere) => _db.Orm.Delete<TEntity>().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction()).WhereDynamic(dywhere);
internal void EnqueueToDbContext(DbContext.ExecCommandInfoType actionType, EntityState state) => internal void EnqueueToDbContext(DbContext.EntityChangeType changeType, EntityState state) =>
_db.EnqueueAction(actionType, this, typeof(EntityState), _entityType, state); _db.EnqueueAction(changeType, this, typeof(EntityState), _entityType, state);
internal void IncrAffrows(int affrows) => internal void IncrAffrows(int affrows) =>
_db._affrows += affrows; _db._affrows += affrows;

View File

@ -23,6 +23,7 @@ namespace FreeSql
{ {
if (adds.Any() == false) return 0; if (adds.Any() == false) return 0;
var affrows = await this.OrmInsert(adds.Select(a => a.Value)).ExecuteAffrowsAsync(); 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; return affrows;
} }
@ -45,6 +46,7 @@ namespace FreeSql
var idtval = await this.OrmInsert(data).ExecuteIdentityAsync(); var idtval = await this.OrmInsert(data).ExecuteIdentityAsync();
IncrAffrows(1); IncrAffrows(1);
_db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval); _db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval);
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert });
Attach(data); Attach(data);
if (_db.Options.EnableAddOrUpdateNavigateList) if (_db.Options.EnableAddOrUpdateNavigateList)
await AddOrUpdateNavigateListAsync(data, true); await AddOrUpdateNavigateListAsync(data, true);
@ -53,6 +55,7 @@ namespace FreeSql
{ {
await DbContextExecCommandAsync(); await DbContextExecCommandAsync();
var newval = (await this.OrmInsert(data).ExecuteInsertedAsync()).First(); var newval = (await this.OrmInsert(data).ExecuteInsertedAsync()).First();
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = newval, Type = DbContext.EntityChangeType.Insert });
IncrAffrows(1); IncrAffrows(1);
_db.Orm.MapEntityValue(_entityType, newval, data); _db.Orm.MapEntityValue(_entityType, newval, data);
Attach(newval); Attach(newval);
@ -67,6 +70,7 @@ namespace FreeSql
var idtval = await this.OrmInsert(data).ExecuteIdentityAsync(); var idtval = await this.OrmInsert(data).ExecuteIdentityAsync();
IncrAffrows(1); IncrAffrows(1);
_db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval); _db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval);
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert });
Attach(data); Attach(data);
if (_db.Options.EnableAddOrUpdateNavigateList) if (_db.Options.EnableAddOrUpdateNavigateList)
await AddOrUpdateNavigateListAsync(data, true); await AddOrUpdateNavigateListAsync(data, true);
@ -74,7 +78,7 @@ namespace FreeSql
return; return;
} }
} }
EnqueueToDbContext(DbContext.ExecCommandInfoType.Insert, CreateEntityState(data)); EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(data));
Attach(data); Attach(data);
if (_db.Options.EnableAddOrUpdateNavigateList) if (_db.Options.EnableAddOrUpdateNavigateList)
await AddOrUpdateNavigateListAsync(data, true); await AddOrUpdateNavigateListAsync(data, true);
@ -100,6 +104,7 @@ namespace FreeSql
await DbContextExecCommandAsync(); await DbContextExecCommandAsync();
var rets = await this.OrmInsert(data).ExecuteInsertedAsync(); var rets = await this.OrmInsert(data).ExecuteInsertedAsync();
if (rets.Count != data.Count()) throw new Exception($"特别错误:批量添加失败,{_db.Orm.Ado.DataType} 的返回数据,与添加的数目不匹配"); 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; var idx = 0;
foreach (var s in data) foreach (var s in data)
_db.Orm.MapEntityValue(_entityType, rets[idx++], s); _db.Orm.MapEntityValue(_entityType, rets[idx++], s);
@ -119,7 +124,7 @@ namespace FreeSql
{ {
//进入队列,等待 SaveChanges 时执行 //进入队列,等待 SaveChanges 时执行
foreach (var item in data) foreach (var item in data)
EnqueueToDbContext(DbContext.ExecCommandInfoType.Insert, CreateEntityState(item)); EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item));
AttachRange(data); AttachRange(data);
if (_db.Options.EnableAddOrUpdateNavigateList) if (_db.Options.EnableAddOrUpdateNavigateList)
foreach (var item in data) foreach (var item in data)
@ -193,7 +198,9 @@ namespace FreeSql
{ {
var delall = _db.Orm.Delete<object>().AsType(tref.RefMiddleEntityType); var delall = _db.Orm.Delete<object>().AsType(tref.RefMiddleEntityType);
foreach (var midWhere in midWheres) delall.Where(midWhere); foreach (var midWhere in midWheres) delall.Where(midWhere);
var sql = delall.ToSql();
await delall.ExecuteAffrowsAsync(); await delall.ExecuteAffrowsAsync();
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
} }
else //保存 else //保存
{ {
@ -314,6 +321,7 @@ namespace FreeSql
var update = this.OrmUpdate(null).SetSource(updateSource).IgnoreColumns(cuig); var update = this.OrmUpdate(null).SetSource(updateSource).IgnoreColumns(cuig);
var affrows = await update.ExecuteAffrowsAsync(); 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) foreach (var newval in data)
{ {
@ -352,7 +360,7 @@ namespace FreeSql
var state = CreateEntityState(item); var state = CreateEntityState(item);
state.OldValue = item; state.OldValue = item;
EnqueueToDbContext(DbContext.ExecCommandInfoType.Update, state); EnqueueToDbContext(DbContext.EntityChangeType.Update, state);
} }
if (_db.Options.EnableAddOrUpdateNavigateList) if (_db.Options.EnableAddOrUpdateNavigateList)
foreach (var item in data) foreach (var item in data)
@ -365,6 +373,7 @@ namespace FreeSql
{ {
if (dels.Any() == false) return 0; if (dels.Any() == false) return 0;
var affrows = await this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrowsAsync(); 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); return Math.Max(dels.Length, affrows);
} }
#endregion #endregion

View File

@ -23,6 +23,7 @@ namespace FreeSql
{ {
if (adds.Any() == false) return 0; if (adds.Any() == false) return 0;
var affrows = this.OrmInsert(adds.Select(a => a.Value)).ExecuteAffrows(); 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; return affrows;
} }
@ -45,6 +46,7 @@ namespace FreeSql
var idtval = this.OrmInsert(data).ExecuteIdentity(); var idtval = this.OrmInsert(data).ExecuteIdentity();
IncrAffrows(1); IncrAffrows(1);
_db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval); _db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval);
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert });
Attach(data); Attach(data);
if (_db.Options.EnableAddOrUpdateNavigateList) if (_db.Options.EnableAddOrUpdateNavigateList)
AddOrUpdateNavigateList(data, true); AddOrUpdateNavigateList(data, true);
@ -53,6 +55,7 @@ namespace FreeSql
{ {
DbContextExecCommand(); DbContextExecCommand();
var newval = this.OrmInsert(data).ExecuteInserted().First(); var newval = this.OrmInsert(data).ExecuteInserted().First();
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = newval, Type = DbContext.EntityChangeType.Insert });
IncrAffrows(1); IncrAffrows(1);
_db.Orm.MapEntityValue(_entityType, newval, data); _db.Orm.MapEntityValue(_entityType, newval, data);
Attach(newval); Attach(newval);
@ -67,6 +70,7 @@ namespace FreeSql
var idtval = this.OrmInsert(data).ExecuteIdentity(); var idtval = this.OrmInsert(data).ExecuteIdentity();
IncrAffrows(1); IncrAffrows(1);
_db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval); _db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval);
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert });
Attach(data); Attach(data);
if (_db.Options.EnableAddOrUpdateNavigateList) if (_db.Options.EnableAddOrUpdateNavigateList)
AddOrUpdateNavigateList(data, true); AddOrUpdateNavigateList(data, true);
@ -74,7 +78,7 @@ namespace FreeSql
return; return;
} }
} }
EnqueueToDbContext(DbContext.ExecCommandInfoType.Insert, CreateEntityState(data)); EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(data));
Attach(data); Attach(data);
if (_db.Options.EnableAddOrUpdateNavigateList) if (_db.Options.EnableAddOrUpdateNavigateList)
AddOrUpdateNavigateList(data, true); AddOrUpdateNavigateList(data, true);
@ -104,6 +108,7 @@ namespace FreeSql
DbContextExecCommand(); DbContextExecCommand();
var rets = this.OrmInsert(data).ExecuteInserted(); var rets = this.OrmInsert(data).ExecuteInserted();
if (rets.Count != data.Count()) throw new Exception($"特别错误:批量添加失败,{_db.Orm.Ado.DataType} 的返回数据,与添加的数目不匹配"); 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; var idx = 0;
foreach (var s in data) foreach (var s in data)
_db.Orm.MapEntityValue(_entityType, rets[idx++], s); _db.Orm.MapEntityValue(_entityType, rets[idx++], s);
@ -123,7 +128,7 @@ namespace FreeSql
{ {
//进入队列,等待 SaveChanges 时执行 //进入队列,等待 SaveChanges 时执行
foreach (var item in data) foreach (var item in data)
EnqueueToDbContext(DbContext.ExecCommandInfoType.Insert, CreateEntityState(item)); EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item));
AttachRange(data); AttachRange(data);
if (_db.Options.EnableAddOrUpdateNavigateList) if (_db.Options.EnableAddOrUpdateNavigateList)
foreach (var item in data) foreach (var item in data)
@ -203,7 +208,9 @@ namespace FreeSql
{ {
var delall = _db.Orm.Delete<object>().AsType(tref.RefMiddleEntityType); var delall = _db.Orm.Delete<object>().AsType(tref.RefMiddleEntityType);
foreach (var midWhere in midWheres) delall.Where(midWhere); foreach (var midWhere in midWheres) delall.Where(midWhere);
var sql = delall.ToSql();
delall.ExecuteAffrows(); delall.ExecuteAffrows();
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
} }
else //保存 else //保存
{ {
@ -324,6 +331,7 @@ namespace FreeSql
var update = this.OrmUpdate(null).SetSource(updateSource).IgnoreColumns(cuig); var update = this.OrmUpdate(null).SetSource(updateSource).IgnoreColumns(cuig);
var affrows = update.ExecuteAffrows(); var affrows = update.ExecuteAffrows();
_db._entityChangeReport.AddRange(updateSource.Select(a => new DbContext.EntityChangeInfo { Object = a, Type = DbContext.EntityChangeType.Update }));
foreach (var newval in data) foreach (var newval in data)
{ {
@ -368,7 +376,7 @@ namespace FreeSql
var state = CreateEntityState(item); var state = CreateEntityState(item);
state.OldValue = item; state.OldValue = item;
EnqueueToDbContext(DbContext.ExecCommandInfoType.Update, state); EnqueueToDbContext(DbContext.EntityChangeType.Update, state);
} }
if (_db.Options.EnableAddOrUpdateNavigateList) if (_db.Options.EnableAddOrUpdateNavigateList)
foreach (var item in data) foreach (var item in data)
@ -381,6 +389,7 @@ namespace FreeSql
{ {
if (dels.Any() == false) return 0; if (dels.Any() == false) return 0;
var affrows = this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrows(); 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); return Math.Max(dels.Length, affrows);
} }
@ -398,7 +407,7 @@ namespace FreeSql
_states.TryRemove(state.Key, out var trystate); _states.TryRemove(state.Key, out var trystate);
_db.Orm.ClearEntityPrimaryValueWithIdentityAndGuid(_entityType, item); _db.Orm.ClearEntityPrimaryValueWithIdentityAndGuid(_entityType, item);
EnqueueToDbContext(DbContext.ExecCommandInfoType.Delete, state); EnqueueToDbContext(DbContext.EntityChangeType.Delete, state);
} }
} }
#endregion #endregion

View File

@ -1,6 +1,7 @@
using FreeSql; using FreeSql;
using System; using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic;
public static class FreeSqlDbContextExtensions public static class FreeSqlDbContextExtensions
{ {
@ -31,12 +32,13 @@ public static class FreeSqlDbContextExtensions
/// </summary> /// </summary>
/// <param name="that"></param> /// <param name="that"></param>
/// <param name="options"></param> /// <param name="options"></param>
public static void SetDbContextOptions(this IFreeSql that, Action<DbContextOptions> options) public static IFreeSql SetDbContextOptions(this IFreeSql that, Action<DbContextOptions> options)
{ {
if (options == null) return; if (options == null) return that;
var cfg = _dicSetDbContextOptions.GetOrAdd(that, t => new DbContextOptions()); var cfg = _dicSetDbContextOptions.GetOrAdd(that, t => new DbContextOptions());
options(cfg); options(cfg);
_dicSetDbContextOptions.AddOrUpdate(that, cfg, (t, o) => cfg); _dicSetDbContextOptions.AddOrUpdate(that, cfg, (t, o) => cfg);
return that;
} }
internal static ConcurrentDictionary<IFreeSql, DbContextOptions> _dicSetDbContextOptions = new ConcurrentDictionary<IFreeSql, DbContextOptions>(); internal static ConcurrentDictionary<IFreeSql, DbContextOptions> _dicSetDbContextOptions = new ConcurrentDictionary<IFreeSql, DbContextOptions>();
} }

View File

@ -60,6 +60,11 @@
- 属性集合不为空时,与数据库存在的关联数据(中间表)完全对比,计算出应该删除和添加的记录 - 属性集合不为空时,与数据库存在的关联数据(中间表)完全对比,计算出应该删除和添加的记录
</summary> </summary>
</member> </member>
<member name="P:FreeSql.DbContextOptions.OnEntityChange">
<summary>
实体变化事件
</summary>
</member>
<member name="M:FreeSql.DbSet`1.AsType(System.Type)"> <member name="M:FreeSql.DbSet`1.AsType(System.Type)">
<summary> <summary>
动态Type在使用 DbSet&lt;object&gt; 后使用本方法,指定实体类型 动态Type在使用 DbSet&lt;object&gt; 后使用本方法,指定实体类型
@ -214,6 +219,16 @@
开启工作单元 开启工作单元
</summary> </summary>
</member> </member>
<member name="P:FreeSql.IUnitOfWork.OnEntityChange">
<summary>
实体变化事件
</summary>
</member>
<member name="P:FreeSql.UnitOfWork.EntityChangeReport">
<summary>
工作单元的实体变化记录
</summary>
</member>
<member name="M:FreeSqlDbContextExtensions.CreateDbContext(IFreeSql)"> <member name="M:FreeSqlDbContextExtensions.CreateDbContext(IFreeSql)">
<summary> <summary>
创建普通数据上下文档对象 创建普通数据上下文档对象

View File

@ -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() public override int SaveChanges()
{ {
ExecCommand(); ExecCommand();
var ret = _affrows; return SaveChangesSuccess();
_affrows = 0;
return ret;
} }
async public override Task<int> SaveChangesAsync() async public override Task<int> SaveChangesAsync()
{ {
await ExecCommandAsync(); await ExecCommandAsync();
var ret = _affrows; return SaveChangesSuccess();
_affrows = 0;
return ret;
} }
} }
} }

View File

@ -1,4 +1,5 @@
using System; using FreeSql.Extensions.EntityUtil;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Linq.Expressions; using System.Linq.Expressions;
@ -69,8 +70,22 @@ namespace FreeSql
public ISelect<TEntity> Where(Expression<Func<TEntity, bool>> exp) => _dbset.OrmSelectInternal(null).Where(exp); public ISelect<TEntity> Where(Expression<Func<TEntity, bool>> exp) => _dbset.OrmSelectInternal(null).Where(exp);
public ISelect<TEntity> WhereIf(bool condition, Expression<Func<TEntity, bool>> exp) => _dbset.OrmSelectInternal(null).WhereIf(condition, exp); public ISelect<TEntity> WhereIf(bool condition, Expression<Func<TEntity, bool>> exp) => _dbset.OrmSelectInternal(null).WhereIf(condition, exp);
public int Delete(Expression<Func<TEntity, bool>> predicate) => _dbset.OrmDeleteInternal(null).Where(predicate).ExecuteAffrows(); public int Delete(Expression<Func<TEntity, bool>> predicate)
public Task<int> DeleteAsync(Expression<Func<TEntity, bool>> predicate) => _dbset.OrmDeleteInternal(null).Where(predicate).ExecuteAffrowsAsync(); {
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<int> DeleteAsync(Expression<Func<TEntity, bool>> 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) 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); var tb = _db.Orm.CodeFirst.GetTableByEntity(EntityType);
_dbset._statesInternal.TryRemove(stateKey, out var trystate); if (tb.Primarys.Length != 1) throw new Exception($"实体类型 {EntityType.Name} 主键数量不为 1无法使用该方法");
return _dbset.OrmDeleteInternal(id).ExecuteAffrows(); if (tb.Primarys[0].CsType.NullableTypeOrThis() != typeof(TKey).NullableTypeOrThis()) throw new Exception($"实体类型 {EntityType.Name} 主键类型不为 {typeof(TKey).FullName},无法使用该方法");
} var obj = Activator.CreateInstance(tb.Type);
public Task<int> DeleteAsync(TKey id) _db.Orm.SetEntityValueWithPropertyName(tb.Type, obj, tb.Primarys[0].CsName, id);
{ var ret = obj as TEntity;
var stateKey = string.Concat(id); if (ret == null) throw new Exception($"实体类型 {EntityType.Name} 无法转换为 {typeof(TEntity).Name},无法使用该方法");
_dbset._statesInternal.TryRemove(stateKey, out var trystate); return ret;
return _dbset.OrmDeleteInternal(id).ExecuteAffrowsAsync();
} }
public TEntity Find(TKey id) => _dbset.OrmSelectInternal(id).ToOne(); public int Delete(TKey id) => Delete(CheckTKeyAndReturnIdEntity(id));
public Task<TEntity> FindAsync(TKey id) => _dbset.OrmSelectInternal(id).ToOneAsync(); public Task<int> DeleteAsync(TKey id) => DeleteAsync(CheckTKeyAndReturnIdEntity(id));
public TEntity Find(TKey id) => _dbset.OrmSelectInternal(CheckTKeyAndReturnIdEntity(id)).ToOne();
public Task<TEntity> FindAsync(TKey id) => _dbset.OrmSelectInternal(CheckTKeyAndReturnIdEntity(id)).ToOneAsync();
public TEntity Get(TKey id) => Find(id); public TEntity Get(TKey id) => Find(id);
public Task<TEntity> GetAsync(TKey id) => FindAsync(id); public Task<TEntity> GetAsync(TKey id) => FindAsync(id);

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.Data; using System.Data;
using System.Data.Common; using System.Data.Common;
@ -32,5 +33,10 @@ namespace FreeSql
/// 开启工作单元 /// 开启工作单元
/// </summary> /// </summary>
void Open(); void Open();
/// <summary>
/// 实体变化事件
/// </summary>
Action<List<DbContext.EntityChangeInfo>> OnEntityChange { get; set; }
} }
} }

View File

@ -1,5 +1,6 @@
using SafeObjectPool; using SafeObjectPool;
using System; using System;
using System.Collections.Generic;
using System.Data; using System.Data;
using System.Data.Common; using System.Data.Common;
using System.Threading; using System.Threading;
@ -32,6 +33,7 @@ namespace FreeSql
#if ns20 #if ns20
Current.Value = null; Current.Value = null;
#endif #endif
EntityChangeReport.Clear();
} }
public bool Enable { get; private set; } = true; public bool Enable { get; private set; } = true;
@ -76,7 +78,11 @@ namespace FreeSql
{ {
try try
{ {
if (_tran != null) _tran.Commit(); if (_tran != null)
{
_tran.Commit();
OnEntityChange?.Invoke(EntityChangeReport);
}
} }
finally finally
{ {
@ -94,6 +100,13 @@ namespace FreeSql
ReturnObject(); ReturnObject();
} }
} }
public Action<List<DbContext.EntityChangeInfo>> OnEntityChange { get; set; }
/// <summary>
/// 工作单元的实体变化记录
/// </summary>
public List<DbContext.EntityChangeInfo> EntityChangeReport { get; } = new List<DbContext.EntityChangeInfo>();
~UnitOfWork() ~UnitOfWork()
{ {
this.Dispose(); this.Dispose();

View File

@ -2215,6 +2215,11 @@
实体类型 实体类型
</summary> </summary>
</member> </member>
<member name="P:FreeSql.Aop.CurdBeforeEventArgs.Table">
<summary>
实体类型的元数据
</summary>
</member>
<member name="P:FreeSql.Aop.CurdBeforeEventArgs.Sql"> <member name="P:FreeSql.Aop.CurdBeforeEventArgs.Sql">
<summary> <summary>
执行的 SQL 执行的 SQL

View File

@ -151,16 +151,17 @@ namespace FreeSql.Aop
public class CurdBeforeEventArgs : EventArgs public class CurdBeforeEventArgs : EventArgs
{ {
public CurdBeforeEventArgs(Type entityType, CurdType curdType, string sql, DbParameter[] dbParms) : public CurdBeforeEventArgs(Type entityType, TableInfo table, CurdType curdType, string sql, DbParameter[] dbParms) :
this(Guid.NewGuid(), new Stopwatch(), entityType, curdType, sql, dbParms) this(Guid.NewGuid(), new Stopwatch(), entityType, table, curdType, sql, dbParms)
{ {
this.Stopwatch.Start(); 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.Identifier = identifier;
this.Stopwatch = stopwatch; this.Stopwatch = stopwatch;
this.EntityType = entityType; this.EntityType = entityType;
this.Table = table;
this.CurdType = curdType; this.CurdType = curdType;
this.Sql = sql; this.Sql = sql;
this.DbParms = dbParms; this.DbParms = dbParms;
@ -181,6 +182,10 @@ namespace FreeSql.Aop
/// </summary> /// </summary>
public Type EntityType { get; } public Type EntityType { get; }
/// <summary> /// <summary>
/// 实体类型的元数据
/// </summary>
public TableInfo Table { get; set; }
/// <summary>
/// 执行的 SQL /// 执行的 SQL
/// </summary> /// </summary>
public string Sql { get; } public string Sql { get; }
@ -193,7 +198,7 @@ namespace FreeSql.Aop
public class CurdAfterEventArgs : CurdBeforeEventArgs public class CurdAfterEventArgs : CurdBeforeEventArgs
{ {
public CurdAfterEventArgs(CurdBeforeEventArgs before, Exception exception, object executeResult) : 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.Exception = exception;
this.ExecuteResult = executeResult; this.ExecuteResult = executeResult;

View File

@ -58,7 +58,7 @@ namespace FreeSql.Internal.CommonProvider
var sql = this.ToSql(); var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var affrows = 0; var affrows = 0;
Exception exception = null; Exception exception = null;
@ -84,7 +84,7 @@ namespace FreeSql.Internal.CommonProvider
var sql = this.ToSql(); var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var affrows = 0; var affrows = 0;
Exception exception = null; Exception exception = null;

View File

@ -488,7 +488,7 @@ namespace FreeSql.Internal.CommonProvider
protected int RawExecuteAffrows() protected int RawExecuteAffrows()
{ {
var sql = ToSql(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var affrows = 0; var affrows = 0;
Exception exception = null; Exception exception = null;
@ -511,7 +511,7 @@ namespace FreeSql.Internal.CommonProvider
async protected Task<int> RawExecuteAffrowsAsync() async protected Task<int> RawExecuteAffrowsAsync()
{ {
var sql = ToSql(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var affrows = 0; var affrows = 0;
Exception exception = null; Exception exception = null;

View File

@ -265,7 +265,7 @@ namespace FreeSql.Internal.CommonProvider
{ {
var sql = this.ToSql(field); var sql = this.ToSql(field);
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
DataTable ret = null; DataTable ret = null;
Exception exception = null; Exception exception = null;
@ -289,7 +289,7 @@ namespace FreeSql.Internal.CommonProvider
{ {
var sql = this.ToSql(field); var sql = this.ToSql(field);
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
DataTable ret = null; DataTable ret = null;
Exception exception = null; Exception exception = null;
@ -315,7 +315,7 @@ namespace FreeSql.Internal.CommonProvider
var sql = this.ToSql(field); var sql = this.ToSql(field);
var type = typeof(TTuple); var type = typeof(TTuple);
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<TTuple>(); var ret = new List<TTuple>();
var flagStr = $"ToListField:{field}"; var flagStr = $"ToListField:{field}";
@ -345,7 +345,7 @@ namespace FreeSql.Internal.CommonProvider
var sql = this.ToSql(field); var sql = this.ToSql(field);
var type = typeof(TTuple); var type = typeof(TTuple);
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<TTuple>(); var ret = new List<TTuple>();
var flagStr = $"ToListField:{field}"; var flagStr = $"ToListField:{field}";
@ -374,7 +374,7 @@ namespace FreeSql.Internal.CommonProvider
internal List<T1> ToListAfPrivate(string sql, GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List<object> retlist)[] otherData) internal List<T1> ToListAfPrivate(string sql, GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List<object> retlist)[] otherData)
{ {
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -409,7 +409,7 @@ namespace FreeSql.Internal.CommonProvider
async internal Task<List<T1>> ToListAfPrivateAsync(string sql, GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List<object> retlist)[] otherData) async internal Task<List<T1>> ToListAfPrivateAsync(string sql, GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List<object> retlist)[] otherData)
{ {
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -476,7 +476,7 @@ namespace FreeSql.Internal.CommonProvider
internal void ToListAfChunkPrivate(int chunkSize, Action<List<T1>> chunkDone, string sql, GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List<object> retlist)[] otherData) internal void ToListAfChunkPrivate(int chunkSize, Action<List<T1>> chunkDone, string sql, GetAllFieldExpressionTreeInfo af, (string field, ReadAnonymousTypeInfo read, List<object> retlist)[] otherData)
{ {
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
var retCount = 0; var retCount = 0;
@ -579,7 +579,7 @@ namespace FreeSql.Internal.CommonProvider
var sql = this.ToSql(af.field); var sql = this.ToSql(af.field);
var type = typeof(TReturn); var type = typeof(TReturn);
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<TReturn>(); var ret = new List<TReturn>();
Exception exception = null; Exception exception = null;
@ -610,7 +610,7 @@ namespace FreeSql.Internal.CommonProvider
var sql = this.ToSql(af.field); var sql = this.ToSql(af.field);
var type = typeof(TReturn); var type = typeof(TReturn);
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<TReturn>(); var ret = new List<TReturn>();
Exception exception = null; Exception exception = null;
@ -1088,7 +1088,7 @@ namespace FreeSql.Internal.CommonProvider
{ {
var sql = this.InternalToSql<int>(select); var sql = this.InternalToSql<int>(select);
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
DataTable ret = null; DataTable ret = null;
Exception exception = null; Exception exception = null;
@ -1112,7 +1112,7 @@ namespace FreeSql.Internal.CommonProvider
{ {
var sql = this.InternalToSql<int>(select); var sql = this.InternalToSql<int>(select);
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
DataTable ret = null; DataTable ret = null;
Exception exception = null; Exception exception = null;

View File

@ -325,7 +325,7 @@ namespace FreeSql.Internal.CommonProvider
var sql = this.ToSql(); var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
var dbParms = _params.Concat(_paramsSource).ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var affrows = 0; var affrows = 0;
Exception exception = null; Exception exception = null;
@ -351,7 +351,7 @@ namespace FreeSql.Internal.CommonProvider
var sql = this.ToSql(); var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
var dbParms = _params.Concat(_paramsSource).ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var affrows = 0; var affrows = 0;
Exception exception = null; Exception exception = null;

View File

@ -32,7 +32,7 @@ namespace FreeSql.MySql.Curd
} }
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -70,7 +70,7 @@ namespace FreeSql.MySql.Curd
} }
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;

View File

@ -29,7 +29,7 @@ namespace FreeSql.MySql.Curd
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
sql = string.Concat(sql, "; SELECT LAST_INSERT_ID();"); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
long ret = 0; long ret = 0;
Exception exception = null; Exception exception = null;
@ -55,7 +55,7 @@ namespace FreeSql.MySql.Curd
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
sql = string.Concat(sql, "; SELECT LAST_INSERT_ID();"); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
long ret = 0; long ret = 0;
Exception exception = null; Exception exception = null;
@ -91,7 +91,7 @@ namespace FreeSql.MySql.Curd
++colidx; ++colidx;
} }
sql = sb.ToString(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -127,7 +127,7 @@ namespace FreeSql.MySql.Curd
++colidx; ++colidx;
} }
sql = sb.ToString(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;

View File

@ -41,7 +41,7 @@ namespace FreeSql.MySql.Curd
} }
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.Concat(_paramsSource).ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -79,7 +79,7 @@ namespace FreeSql.MySql.Curd
} }
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.Concat(_paramsSource).ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;

View File

@ -32,7 +32,7 @@ namespace FreeSql.Odbc.Default
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
Object<DbConnection> poolConn = null; Object<DbConnection> 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); _orm.Aop.CurdBefore?.Invoke(this, before);
long ret = 0; long ret = 0;
Exception exception = null; Exception exception = null;
@ -69,7 +69,7 @@ namespace FreeSql.Odbc.Default
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
Object<DbConnection> poolConn = null; Object<DbConnection> 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); _orm.Aop.CurdBefore?.Invoke(this, before);
long ret = 0; long ret = 0;
Exception exception = null; Exception exception = null;

View File

@ -32,7 +32,7 @@ namespace FreeSql.Odbc.MySql
} }
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -70,7 +70,7 @@ namespace FreeSql.Odbc.MySql
} }
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;

View File

@ -31,7 +31,7 @@ namespace FreeSql.Odbc.MySql
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
Object<DbConnection> poolConn = null; Object<DbConnection> 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); _orm.Aop.CurdBefore?.Invoke(this, before);
long ret = 0; long ret = 0;
Exception exception = null; Exception exception = null;
@ -68,7 +68,7 @@ namespace FreeSql.Odbc.MySql
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
Object<DbConnection> poolConn = null; Object<DbConnection> 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); _orm.Aop.CurdBefore?.Invoke(this, before);
long ret = 0; long ret = 0;
Exception exception = null; Exception exception = null;
@ -115,7 +115,7 @@ namespace FreeSql.Odbc.MySql
++colidx; ++colidx;
} }
sql = sb.ToString(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -151,7 +151,7 @@ namespace FreeSql.Odbc.MySql
++colidx; ++colidx;
} }
sql = sb.ToString(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;

View File

@ -41,7 +41,7 @@ namespace FreeSql.Odbc.MySql
} }
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.Concat(_paramsSource).ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -79,7 +79,7 @@ namespace FreeSql.Odbc.MySql
} }
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.Concat(_paramsSource).ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;

View File

@ -95,7 +95,7 @@ namespace FreeSql.Odbc.Oracle
if (_identCol == null || _source.Count > 1) 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); _orm.Aop.CurdBefore?.Invoke(this, before);
try try
{ {
@ -118,7 +118,7 @@ namespace FreeSql.Odbc.Oracle
identParam.Direction = ParameterDirection.Output; identParam.Direction = ParameterDirection.Output;
sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}"; sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}";
var dbParms = _params.Concat(new[] { identParam }).ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
try try
{ {
@ -148,7 +148,7 @@ namespace FreeSql.Odbc.Oracle
if (_identCol == null || _source.Count > 1) 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); _orm.Aop.CurdBefore?.Invoke(this, before);
try try
{ {
@ -171,7 +171,7 @@ namespace FreeSql.Odbc.Oracle
identParam.Direction = ParameterDirection.Output; identParam.Direction = ParameterDirection.Output;
sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}"; sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}";
var dbParms = _params.Concat(new[] { identParam }).ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
try try
{ {

View File

@ -32,7 +32,7 @@ namespace FreeSql.Odbc.PostgreSQL
} }
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -70,7 +70,7 @@ namespace FreeSql.Odbc.PostgreSQL
} }
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;

View File

@ -36,7 +36,7 @@ namespace FreeSql.Odbc.PostgreSQL
var identCols = _table.Columns.Where(a => a.Value.Attribute.IsIdentity == true); var identCols = _table.Columns.Where(a => a.Value.Attribute.IsIdentity == true);
if (identCols.Any() == false) 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); _orm.Aop.CurdBefore?.Invoke(this, before);
try try
{ {
@ -55,7 +55,7 @@ namespace FreeSql.Odbc.PostgreSQL
return 0; return 0;
} }
sql = string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
try try
{ {
@ -85,7 +85,7 @@ namespace FreeSql.Odbc.PostgreSQL
var identCols = _table.Columns.Where(a => a.Value.Attribute.IsIdentity == true); var identCols = _table.Columns.Where(a => a.Value.Attribute.IsIdentity == true);
if (identCols.Any() == false) 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); _orm.Aop.CurdBefore?.Invoke(this, before);
try try
{ {
@ -104,7 +104,7 @@ namespace FreeSql.Odbc.PostgreSQL
return 0; return 0;
} }
sql = string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
try try
{ {
@ -139,7 +139,7 @@ namespace FreeSql.Odbc.PostgreSQL
++colidx; ++colidx;
} }
sql = sb.ToString(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -175,7 +175,7 @@ namespace FreeSql.Odbc.PostgreSQL
++colidx; ++colidx;
} }
sql = sb.ToString(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;

View File

@ -41,7 +41,7 @@ namespace FreeSql.Odbc.PostgreSQL
} }
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.Concat(_paramsSource).ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -79,7 +79,7 @@ namespace FreeSql.Odbc.PostgreSQL
} }
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.Concat(_paramsSource).ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;

View File

@ -37,7 +37,7 @@ namespace FreeSql.Odbc.SqlServer
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -80,7 +80,7 @@ namespace FreeSql.Odbc.SqlServer
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;

View File

@ -31,7 +31,7 @@ namespace FreeSql.Odbc.SqlServer
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
sql = string.Concat(sql, "; SELECT SCOPE_IDENTITY();"); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
long ret = 0; long ret = 0;
Exception exception = null; Exception exception = null;
@ -57,7 +57,7 @@ namespace FreeSql.Odbc.SqlServer
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
sql = string.Concat(sql, "; SELECT SCOPE_IDENTITY();"); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
long ret = 0; long ret = 0;
Exception exception = null; Exception exception = null;
@ -99,7 +99,7 @@ namespace FreeSql.Odbc.SqlServer
sb.Append(sql.Substring(validx + 1)); sb.Append(sql.Substring(validx + 1));
sql = sb.ToString(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -140,7 +140,7 @@ namespace FreeSql.Odbc.SqlServer
sb.Append(sql.Substring(validx + 1)); sb.Append(sql.Substring(validx + 1));
sql = sb.ToString(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;

View File

@ -46,7 +46,7 @@ namespace FreeSql.Odbc.SqlServer
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.Concat(_paramsSource).ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -89,7 +89,7 @@ namespace FreeSql.Odbc.SqlServer
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.Concat(_paramsSource).ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;

View File

@ -96,7 +96,7 @@ namespace FreeSql.Oracle.Curd
if (_identCol == null || _source.Count > 1) 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); _orm.Aop.CurdBefore?.Invoke(this, before);
try try
{ {
@ -119,7 +119,7 @@ namespace FreeSql.Oracle.Curd
identParam.Direction = ParameterDirection.Output; identParam.Direction = ParameterDirection.Output;
sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}"; sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}";
var dbParms = _params.Concat(new[] { identParam }).ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
try try
{ {
@ -149,7 +149,7 @@ namespace FreeSql.Oracle.Curd
if (_identCol == null || _source.Count > 1) 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); _orm.Aop.CurdBefore?.Invoke(this, before);
try try
{ {
@ -172,7 +172,7 @@ namespace FreeSql.Oracle.Curd
identParam.Direction = ParameterDirection.Output; identParam.Direction = ParameterDirection.Output;
sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}"; sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}";
var dbParms = _params.Concat(new[] { identParam }).ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
try try
{ {

View File

@ -32,7 +32,7 @@ namespace FreeSql.PostgreSQL.Curd
} }
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -70,7 +70,7 @@ namespace FreeSql.PostgreSQL.Curd
} }
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;

View File

@ -36,7 +36,7 @@ namespace FreeSql.PostgreSQL.Curd
var identCols = _table.Columns.Where(a => a.Value.Attribute.IsIdentity == true); var identCols = _table.Columns.Where(a => a.Value.Attribute.IsIdentity == true);
if (identCols.Any() == false) 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); _orm.Aop.CurdBefore?.Invoke(this, before);
try try
{ {
@ -55,7 +55,7 @@ namespace FreeSql.PostgreSQL.Curd
return 0; return 0;
} }
sql = string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
try try
{ {
@ -85,7 +85,7 @@ namespace FreeSql.PostgreSQL.Curd
var identCols = _table.Columns.Where(a => a.Value.Attribute.IsIdentity == true); var identCols = _table.Columns.Where(a => a.Value.Attribute.IsIdentity == true);
if (identCols.Any() == false) 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); _orm.Aop.CurdBefore?.Invoke(this, before);
try try
{ {
@ -104,7 +104,7 @@ namespace FreeSql.PostgreSQL.Curd
return 0; return 0;
} }
sql = string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
try try
{ {
@ -139,7 +139,7 @@ namespace FreeSql.PostgreSQL.Curd
++colidx; ++colidx;
} }
sql = sb.ToString(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -175,7 +175,7 @@ namespace FreeSql.PostgreSQL.Curd
++colidx; ++colidx;
} }
sql = sb.ToString(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;

View File

@ -41,7 +41,7 @@ namespace FreeSql.PostgreSQL.Curd
} }
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.Concat(_paramsSource).ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -79,7 +79,7 @@ namespace FreeSql.PostgreSQL.Curd
} }
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.Concat(_paramsSource).ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;

View File

@ -37,7 +37,7 @@ namespace FreeSql.SqlServer.Curd
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -80,7 +80,7 @@ namespace FreeSql.SqlServer.Curd
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;

View File

@ -31,7 +31,7 @@ namespace FreeSql.SqlServer.Curd
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
sql = string.Concat(sql, "; SELECT SCOPE_IDENTITY();"); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
long ret = 0; long ret = 0;
Exception exception = null; Exception exception = null;
@ -57,7 +57,7 @@ namespace FreeSql.SqlServer.Curd
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
sql = string.Concat(sql, "; SELECT SCOPE_IDENTITY();"); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
long ret = 0; long ret = 0;
Exception exception = null; Exception exception = null;
@ -99,7 +99,7 @@ namespace FreeSql.SqlServer.Curd
sb.Append(sql.Substring(validx + 1)); sb.Append(sql.Substring(validx + 1));
sql = sb.ToString(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -140,7 +140,7 @@ namespace FreeSql.SqlServer.Curd
sb.Append(sql.Substring(validx + 1)); sb.Append(sql.Substring(validx + 1));
sql = sb.ToString(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;

View File

@ -46,7 +46,7 @@ namespace FreeSql.SqlServer.Curd
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.Concat(_paramsSource).ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;
@ -89,7 +89,7 @@ namespace FreeSql.SqlServer.Curd
sql = sb.ToString(); sql = sb.ToString();
var dbParms = _params.Concat(_paramsSource).ToArray(); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
var ret = new List<T1>(); var ret = new List<T1>();
Exception exception = null; Exception exception = null;

View File

@ -30,7 +30,7 @@ namespace FreeSql.Sqlite.Curd
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
sql = string.Concat(sql, "; SELECT last_insert_rowid();"); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
long ret = 0; long ret = 0;
Exception exception = null; Exception exception = null;
@ -56,7 +56,7 @@ namespace FreeSql.Sqlite.Curd
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
sql = string.Concat(sql, "; SELECT last_insert_rowid();"); 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); _orm.Aop.CurdBefore?.Invoke(this, before);
long ret = 0; long ret = 0;
Exception exception = null; Exception exception = null;