diff --git a/DbContext.md b/DbContext.md index 2802a3b..2209749 100644 --- a/DbContext.md +++ b/DbContext.md @@ -168,8 +168,8 @@ Guid Id 的情况下,执行三次命令:前两次插入合并执行,update ```csharp fsql.SetDbContextOptions(opt => { - opt.OnEntityChange = changeReport => { - Console.WriteLine(changeReport); + opt.OnEntityChange = report => { + Console.WriteLine(report); }; }); ``` @@ -178,19 +178,42 @@ fsql.SetDbContextOptions(opt => { ```csharp var ctx = fsql.CreateDbContext(); -ctx.Options.OnEntityChange = changeReport => { - Console.WriteLine(changeReport); +ctx.Options.OnEntityChange = report => { + Console.WriteLine(report); }; var uow = fsql.CreateUnitOfWork(); -uow.OnEntityChange = changeReport => { - Console.WriteLine(changeReport); +uow.OnEntityChange = report => { + Console.WriteLine(report); }; ``` -可实现 FreeSql.DbContext 对实体对象的添加、修改、删除的事件通知。参数 changeReport 是一个 List 集合。 +可实现 FreeSql.DbContext 对实体对象的添加、修改、删除的事件通知。参数 report 是一个 List 集合,集合元素的类型定义如下: -DbContext.SaveChanges,或者 Repository 对实体的 Insert/Update/Delete,或者 UnitOfWork.Commit 操作都会触发一次该事件。 +```csharp +public class EntityChangeInfo +{ + public object Object { get; set; } + public EntityChangeType Type { get; set; } +} +public enum EntityChangeType { Insert, Update, Delete, SqlRaw } +``` + +| 变化类型 | 说明 | +| -- | -- | +| Insert | 实体对象被插入 | +| Update | 实体对象被更新 | +| Delete | 实体对象被删除 | +| SqlRaw | 执行了SQL语句 | + +SqlRaw 目前有两处地方比较特殊: +- 多对多联级更新的时候,对中间表的全部删除操作; +- 通用仓储类 BaseRepository 有一个 Delete 方法,参数为表达式,而并非实体; +```csharp +int Delete(Expression> predicate); +``` + +DbContext.SaveChanges,或者 Repository 对实体的 Insert/Update/Delete,或者 UnitOfWork.Commit 操作都会最多触发一次该事件。 ## 参考资料 diff --git a/Repository.md b/Repository.md index b4da61b..8d4c05a 100644 --- a/Repository.md +++ b/Repository.md @@ -149,8 +149,8 @@ using (var uow = fsql.CreateUnitOfWork()) { ```csharp fsql.SetDbContextOptions(opt => { - opt.OnEntityChange = changeReport => { - Console.WriteLine(changeReport); + opt.OnEntityChange = report => { + Console.WriteLine(report); }; }); ``` @@ -159,19 +159,42 @@ fsql.SetDbContextOptions(opt => { ```csharp var ctx = fsql.CreateDbContext(); -ctx.Options.OnEntityChange = changeReport => { - Console.WriteLine(changeReport); +ctx.Options.OnEntityChange = report => { + Console.WriteLine(report); }; var uow = fsql.CreateUnitOfWork(); -uow.OnEntityChange = changeReport => { - Console.WriteLine(changeReport); +uow.OnEntityChange = report => { + Console.WriteLine(report); }; ``` -可实现 FreeSql.DbContext 对实体对象的添加、修改、删除的事件通知。参数 changeReport 是一个 List 集合。 +可实现 FreeSql.DbContext 对实体对象的添加、修改、删除的事件通知。参数 report 是一个 List 集合,集合元素的类型定义如下: -DbContext.SaveChanges,或者 Repository 对实体的 Insert/Update/Delete,或者 UnitOfWork.Commit 操作都会触发一次该事件。 +```csharp +public class EntityChangeInfo +{ + public object Object { get; set; } + public EntityChangeType Type { get; set; } +} +public enum EntityChangeType { Insert, Update, Delete, SqlRaw } +``` + +| 变化类型 | 说明 | +| -- | -- | +| Insert | 实体对象被插入 | +| Update | 实体对象被更新 | +| Delete | 实体对象被删除 | +| SqlRaw | 执行了SQL语句 | + +SqlRaw 目前有两处地方比较特殊: +- 多对多联级更新的时候,对中间表的全部删除操作; +- 通用仓储类 BaseRepository 有一个 Delete 方法,参数为表达式,而并非实体; +```csharp +int Delete(Expression> predicate); +``` + +DbContext.SaveChanges,或者 Repository 对实体的 Insert/Update/Delete,或者 UnitOfWork.Commit 操作都会最多触发一次该事件。 ## 参考资料