Skip to content

Commit d787792

Browse files
2881028810
authored andcommitted
- 调整 DbContext.EntityChangeInfo 类名为 DbContext.EntityChangeReport.ChangeInfo;
- 调整 IUnitOfWork 接口,移除 OnEntityChange 属性,增加 EntityChangeReport 属性;
1 parent 375ba5f commit d787792

File tree

9 files changed

+60
-50
lines changed

9 files changed

+60
-50
lines changed

FreeSql.DbContext/DbContext/DbContext.cs

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ public DbContextOptions Options
4646
return _optionsPriv;
4747
}
4848
}
49-
internal void EmitOnEntityChange(List<DbContext.EntityChangeInfo> report)
49+
internal void EmitOnEntityChange(List<EntityChangeReport.ChangeInfo> report)
5050
{
51-
var oec = UnitOfWork?.OnEntityChange ?? Options.OnEntityChange;
51+
var oec = UnitOfWork?.EntityChangeReport?.OnChange ?? Options.OnEntityChange;
5252
if (oec == null || report == null || report.Any() == false) return;
5353
oec(report);
5454
}
@@ -155,12 +155,23 @@ public DbContext AttachOnlyPrimary<TEntity>(TEntity data) where TEntity : class
155155
#endregion
156156

157157
#region Queue Action
158-
internal List<EntityChangeInfo> _entityChangeReport = new List<EntityChangeInfo>();
159-
public class EntityChangeInfo
158+
public class EntityChangeReport
160159
{
161-
public object Object { get; set; }
162-
public EntityChangeType Type { get; set; }
160+
public class ChangeInfo
161+
{
162+
public object Object { get; set; }
163+
public EntityChangeType Type { get; set; }
164+
}
165+
/// <summary>
166+
/// 实体变化记录
167+
/// </summary>
168+
public List<ChangeInfo> Report { get; } = new List<ChangeInfo>();
169+
/// <summary>
170+
/// 实体变化事件
171+
/// </summary>
172+
public Action<List<ChangeInfo>> OnChange { get; set; }
163173
}
174+
internal List<EntityChangeReport.ChangeInfo> _entityChangeReport = new List<EntityChangeReport.ChangeInfo>();
164175
public enum EntityChangeType { Insert, Update, Delete, SqlRaw }
165176
internal class ExecCommandInfo
166177
{

FreeSql.DbContext/DbContext/DbContextOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@ public class DbContextOptions
2525
/// <summary>
2626
/// 实体变化事件
2727
/// </summary>
28-
public Action<List<DbContext.EntityChangeInfo>> OnEntityChange { get; set; }
28+
public Action<List<DbContext.EntityChangeReport.ChangeInfo>> OnEntityChange { get; set; }
2929
}
3030
}

FreeSql.DbContext/DbSet/DbSetAsync.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ async Task<int> DbContextBetchAddAsync(EntityState[] adds)
2323
{
2424
if (adds.Any() == false) return 0;
2525
var affrows = await this.OrmInsert(adds.Select(a => a.Value)).ExecuteAffrowsAsync();
26-
_db._entityChangeReport.AddRange(adds.Select(a => new DbContext.EntityChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Insert }));
26+
_db._entityChangeReport.AddRange(adds.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Insert }));
2727
return affrows;
2828
}
2929

@@ -46,7 +46,7 @@ async Task AddPrivAsync(TEntity data, bool isCheck)
4646
var idtval = await this.OrmInsert(data).ExecuteIdentityAsync();
4747
IncrAffrows(1);
4848
_db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval);
49-
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert });
49+
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert });
5050
Attach(data);
5151
if (_db.Options.EnableAddOrUpdateNavigateList)
5252
await AddOrUpdateNavigateListAsync(data, true);
@@ -55,7 +55,7 @@ async Task AddPrivAsync(TEntity data, bool isCheck)
5555
{
5656
await DbContextExecCommandAsync();
5757
var newval = (await this.OrmInsert(data).ExecuteInsertedAsync()).First();
58-
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = newval, Type = DbContext.EntityChangeType.Insert });
58+
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = newval, Type = DbContext.EntityChangeType.Insert });
5959
IncrAffrows(1);
6060
_db.Orm.MapEntityValue(_entityType, newval, data);
6161
Attach(newval);
@@ -70,7 +70,7 @@ async Task AddPrivAsync(TEntity data, bool isCheck)
7070
var idtval = await this.OrmInsert(data).ExecuteIdentityAsync();
7171
IncrAffrows(1);
7272
_db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval);
73-
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert });
73+
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert });
7474
Attach(data);
7575
if (_db.Options.EnableAddOrUpdateNavigateList)
7676
await AddOrUpdateNavigateListAsync(data, true);
@@ -104,7 +104,7 @@ async public Task AddRangeAsync(IEnumerable<TEntity> data)
104104
await DbContextExecCommandAsync();
105105
var rets = await this.OrmInsert(data).ExecuteInsertedAsync();
106106
if (rets.Count != data.Count()) throw new Exception($"特别错误:批量添加失败,{_db.Orm.Ado.DataType} 的返回数据,与添加的数目不匹配");
107-
_db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeInfo { Object = a, Type = DbContext.EntityChangeType.Insert }));
107+
_db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a, Type = DbContext.EntityChangeType.Insert }));
108108
var idx = 0;
109109
foreach (var s in data)
110110
_db.Orm.MapEntityValue(_entityType, rets[idx++], s);
@@ -200,7 +200,7 @@ async Task AddOrUpdateNavigateListAsync(TEntity item, bool isAdd)
200200
foreach (var midWhere in midWheres) delall.Where(midWhere);
201201
var sql = delall.ToSql();
202202
await delall.ExecuteAffrowsAsync();
203-
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
203+
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
204204
}
205205
else //保存
206206
{
@@ -321,7 +321,7 @@ async Task<int> DbContextBetchUpdatePrivAsync(EntityState[] ups, bool isLiveUpda
321321
var update = this.OrmUpdate(null).SetSource(updateSource).IgnoreColumns(cuig);
322322

323323
var affrows = await update.ExecuteAffrowsAsync();
324-
_db._entityChangeReport.AddRange(updateSource.Select(a => new DbContext.EntityChangeInfo { Object = a, Type = DbContext.EntityChangeType.Update }));
324+
_db._entityChangeReport.AddRange(updateSource.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a, Type = DbContext.EntityChangeType.Update }));
325325

326326
foreach (var newval in data)
327327
{
@@ -373,7 +373,7 @@ async Task<int> DbContextBetchRemoveAsync(EntityState[] dels)
373373
{
374374
if (dels.Any() == false) return 0;
375375
var affrows = await this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrowsAsync();
376-
_db._entityChangeReport.AddRange(dels.Select(a => new DbContext.EntityChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Delete }));
376+
_db._entityChangeReport.AddRange(dels.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Delete }));
377377
return Math.Max(dels.Length, affrows);
378378
}
379379
#endregion

FreeSql.DbContext/DbSet/DbSetSync.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ int DbContextBetchAdd(EntityState[] adds)
2323
{
2424
if (adds.Any() == false) return 0;
2525
var affrows = this.OrmInsert(adds.Select(a => a.Value)).ExecuteAffrows();
26-
_db._entityChangeReport.AddRange(adds.Select(a => new DbContext.EntityChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Insert }));
26+
_db._entityChangeReport.AddRange(adds.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Insert }));
2727
return affrows;
2828
}
2929

@@ -46,7 +46,7 @@ void AddPriv(TEntity data, bool isCheck)
4646
var idtval = this.OrmInsert(data).ExecuteIdentity();
4747
IncrAffrows(1);
4848
_db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval);
49-
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert });
49+
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert });
5050
Attach(data);
5151
if (_db.Options.EnableAddOrUpdateNavigateList)
5252
AddOrUpdateNavigateList(data, true);
@@ -55,7 +55,7 @@ void AddPriv(TEntity data, bool isCheck)
5555
{
5656
DbContextExecCommand();
5757
var newval = this.OrmInsert(data).ExecuteInserted().First();
58-
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = newval, Type = DbContext.EntityChangeType.Insert });
58+
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = newval, Type = DbContext.EntityChangeType.Insert });
5959
IncrAffrows(1);
6060
_db.Orm.MapEntityValue(_entityType, newval, data);
6161
Attach(newval);
@@ -70,7 +70,7 @@ void AddPriv(TEntity data, bool isCheck)
7070
var idtval = this.OrmInsert(data).ExecuteIdentity();
7171
IncrAffrows(1);
7272
_db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval);
73-
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert });
73+
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert });
7474
Attach(data);
7575
if (_db.Options.EnableAddOrUpdateNavigateList)
7676
AddOrUpdateNavigateList(data, true);
@@ -108,7 +108,7 @@ public void AddRange(IEnumerable<TEntity> data)
108108
DbContextExecCommand();
109109
var rets = this.OrmInsert(data).ExecuteInserted();
110110
if (rets.Count != data.Count()) throw new Exception($"特别错误:批量添加失败,{_db.Orm.Ado.DataType} 的返回数据,与添加的数目不匹配");
111-
_db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeInfo { Object = a, Type = DbContext.EntityChangeType.Insert }));
111+
_db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a, Type = DbContext.EntityChangeType.Insert }));
112112
var idx = 0;
113113
foreach (var s in data)
114114
_db.Orm.MapEntityValue(_entityType, rets[idx++], s);
@@ -210,7 +210,7 @@ void AddOrUpdateNavigateList(TEntity item, bool isAdd)
210210
foreach (var midWhere in midWheres) delall.Where(midWhere);
211211
var sql = delall.ToSql();
212212
delall.ExecuteAffrows();
213-
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
213+
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
214214
}
215215
else //保存
216216
{
@@ -331,7 +331,7 @@ int DbContextBetchUpdatePriv(EntityState[] ups, bool isLiveUpdate)
331331
var update = this.OrmUpdate(null).SetSource(updateSource).IgnoreColumns(cuig);
332332

333333
var affrows = update.ExecuteAffrows();
334-
_db._entityChangeReport.AddRange(updateSource.Select(a => new DbContext.EntityChangeInfo { Object = a, Type = DbContext.EntityChangeType.Update }));
334+
_db._entityChangeReport.AddRange(updateSource.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a, Type = DbContext.EntityChangeType.Update }));
335335

336336
foreach (var newval in data)
337337
{
@@ -389,7 +389,7 @@ int DbContextBetchRemove(EntityState[] dels)
389389
{
390390
if (dels.Any() == false) return 0;
391391
var affrows = this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrows();
392-
_db._entityChangeReport.AddRange(dels.Select(a => new DbContext.EntityChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Delete }));
392+
_db._entityChangeReport.AddRange(dels.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Delete }));
393393
return Math.Max(dels.Length, affrows);
394394
}
395395

FreeSql.DbContext/FreeSql.DbContext.xml

Lines changed: 12 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

FreeSql.DbContext/Repository/ContextSet/RepositoryDbContext.cs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,12 @@ int SaveChangesSuccess()
5959
int ret;
6060
try
6161
{
62-
if (UnitOfWork == null) EmitOnEntityChange(_entityChangeReport);
63-
else
62+
if (UnitOfWork?.EntityChangeReport != null)
6463
{
65-
var uow = UnitOfWork as UnitOfWork;
66-
if (uow != null)
67-
{
68-
uow.EntityChangeReport.AddRange(_entityChangeReport);
69-
if (uow.OnEntityChange == null) uow.OnEntityChange = Options.OnEntityChange;
70-
}
71-
}
64+
UnitOfWork.EntityChangeReport.Report.AddRange(_entityChangeReport);
65+
if (UnitOfWork.EntityChangeReport.OnChange == null) UnitOfWork.EntityChangeReport.OnChange = Options.OnEntityChange;
66+
} else
67+
EmitOnEntityChange(_entityChangeReport);
7268
}
7369
finally
7470
{

FreeSql.DbContext/Repository/Repository/BaseRepository.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,15 +75,15 @@ public int Delete(Expression<Func<TEntity, bool>> predicate)
7575
var delete = _dbset.OrmDeleteInternal(null).Where(predicate);
7676
var sql = delete.ToSql();
7777
var affrows = delete.ExecuteAffrows();
78-
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
78+
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
7979
return affrows;
8080
}
8181
async public Task<int> DeleteAsync(Expression<Func<TEntity, bool>> predicate)
8282
{
8383
var delete = _dbset.OrmDeleteInternal(null).Where(predicate);
8484
var sql = delete.ToSql();
8585
var affrows = await delete.ExecuteAffrowsAsync();
86-
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
86+
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
8787
return affrows;
8888
}
8989

FreeSql.DbContext/UnitOfWork/IUnitOfWork.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ public interface IUnitOfWork : IDisposable
3535
void Open();
3636

3737
/// <summary>
38-
/// 实体变化事件
38+
/// 此工作单元内的实体变化跟踪
3939
/// </summary>
40-
Action<List<DbContext.EntityChangeInfo>> OnEntityChange { get; set; }
40+
DbContext.EntityChangeReport EntityChangeReport { get; }
4141
}
4242
}

FreeSql.DbContext/UnitOfWork/UnitOfWork.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Collections.Generic;
44
using System.Data;
55
using System.Data.Common;
6+
using System.Linq;
67
using System.Threading;
78

89
namespace FreeSql
@@ -33,7 +34,7 @@ void ReturnObject()
3334
#if ns20
3435
Current.Value = null;
3536
#endif
36-
EntityChangeReport.Clear();
37+
EntityChangeReport?.Report.Clear();
3738
}
3839

3940
public bool Enable { get; private set; } = true;
@@ -81,7 +82,8 @@ public void Commit()
8182
if (_tran != null)
8283
{
8384
_tran.Commit();
84-
OnEntityChange?.Invoke(EntityChangeReport);
85+
if (EntityChangeReport != null && EntityChangeReport.OnChange != null && EntityChangeReport.Report.Any() == true)
86+
EntityChangeReport.OnChange.Invoke(EntityChangeReport.Report);
8587
}
8688
}
8789
finally
@@ -101,11 +103,7 @@ public void Rollback()
101103
}
102104
}
103105

104-
public Action<List<DbContext.EntityChangeInfo>> OnEntityChange { get; set; }
105-
/// <summary>
106-
/// 工作单元的实体变化记录
107-
/// </summary>
108-
public List<DbContext.EntityChangeInfo> EntityChangeReport { get; } = new List<DbContext.EntityChangeInfo>();
106+
public DbContext.EntityChangeReport EntityChangeReport { get; } = new DbContext.EntityChangeReport();
109107

110108
~UnitOfWork()
111109
{

0 commit comments

Comments
 (0)