From 5befb125e78e3e73372d8be1c2ad2b3bc013b735 Mon Sep 17 00:00:00 2001 From: igeekfan Date: Sun, 26 Jun 2022 21:43:49 +0800 Subject: [PATCH] =?UTF-8?q?#1170=20DbContext,=E4=BB=93=E5=82=A8=20?= =?UTF-8?q?=E5=AE=A1=E8=AE=A1=E6=97=A5=E5=BF=97ChangeInfo=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=AE=9E=E4=BD=93=E7=B1=BB=E5=9E=8B=20EntityType?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/DbContext/DbContext.cs | 4 ++++ FreeSql.DbContext/DbSet/DbSetAsync.cs | 24 ++++++++++--------- FreeSql.DbContext/DbSet/DbSetSync.cs | 15 ++++++------ .../Repository/Repository/BaseRepository.cs | 2 +- .../Repository/BaseRepositoryAsync.cs | 2 +- 5 files changed, 27 insertions(+), 20 deletions(-) diff --git a/FreeSql.DbContext/DbContext/DbContext.cs b/FreeSql.DbContext/DbContext/DbContext.cs index e28fb174..d76dc6fc 100644 --- a/FreeSql.DbContext/DbContext/DbContext.cs +++ b/FreeSql.DbContext/DbContext/DbContext.cs @@ -263,6 +263,10 @@ namespace FreeSql /// public object BeforeObject { get; set; } public EntityChangeType Type { get; set; } + /// + /// 实体类型 + /// + public Type EntityType { get; set; } } /// /// 实体变化记录 diff --git a/FreeSql.DbContext/DbSet/DbSetAsync.cs b/FreeSql.DbContext/DbSet/DbSetAsync.cs index ea5d35d1..76889230 100644 --- a/FreeSql.DbContext/DbSet/DbSetAsync.cs +++ b/FreeSql.DbContext/DbSet/DbSetAsync.cs @@ -26,7 +26,7 @@ namespace FreeSql { if (adds.Any() == false) return 0; var affrows = await this.OrmInsert(adds.Select(a => a.Value)).ExecuteAffrowsAsync(cancellationToken); - _db._entityChangeReport.AddRange(adds.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Insert })); + _db._entityChangeReport.AddRange(adds.Select(a => new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = a.Value, Type = DbContext.EntityChangeType.Insert })); return affrows; } @@ -53,7 +53,7 @@ namespace FreeSql var idtval = await this.OrmInsert(data).ExecuteIdentityAsync(cancellationToken); IncrAffrows(1); _db.OrmOriginal.SetEntityValueWithPropertyName(_entityType, data, _tableIdentitys[0].CsName, idtval); - _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert }); + _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = data, Type = DbContext.EntityChangeType.Insert }); Attach(data); if (_db.Options.EnableCascadeSave) await AddOrUpdateNavigateAsync(data, true, null, cancellationToken); @@ -62,7 +62,7 @@ namespace FreeSql { await DbContextFlushCommandAsync(cancellationToken); var newval = (await this.OrmInsert(data).ExecuteInsertedAsync(cancellationToken)).First(); - _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = newval, Type = DbContext.EntityChangeType.Insert }); + _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = newval, Type = DbContext.EntityChangeType.Insert }); IncrAffrows(1); _db.OrmOriginal.MapEntityValue(_entityType, newval, data); Attach(newval); @@ -77,7 +77,7 @@ namespace FreeSql var idtval = await this.OrmInsert(data).ExecuteIdentityAsync(cancellationToken); IncrAffrows(1); _db.OrmOriginal.SetEntityValueWithPropertyName(_entityType, data, _tableIdentitys[0].CsName, idtval); - _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert }); + _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = data, Type = DbContext.EntityChangeType.Insert }); Attach(data); if (_db.Options.EnableCascadeSave) await AddOrUpdateNavigateAsync(data, true, null, cancellationToken); @@ -115,7 +115,7 @@ namespace FreeSql await DbContextFlushCommandAsync(cancellationToken); var rets = await this.OrmInsert(data).ExecuteInsertedAsync(cancellationToken); if (rets.Count != data.Count()) throw new Exception(DbContextStrings.SpecialError_BatchAdditionFailed(_db.OrmOriginal.Ado.DataType)); - _db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a, Type = DbContext.EntityChangeType.Insert })); + _db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = a, Type = DbContext.EntityChangeType.Insert })); var idx = 0; foreach (var s in data) _db.OrmOriginal.MapEntityValue(_entityType, rets[idx++], s); @@ -266,7 +266,7 @@ namespace FreeSql foreach (var midWhere in midWheres) delall.Where(midWhere); var sql = delall.ToSql(); await delall.ExecuteAffrowsAsync(cancellationToken); - _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw }); + _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = sql, Type = DbContext.EntityChangeType.SqlRaw }); } else //保存 { @@ -404,10 +404,12 @@ namespace FreeSql var update = this.OrmUpdate(null).SetSource(data.Select(a => a.Value)).IgnoreColumns(cuig); var affrows = await update.ExecuteAffrowsAsync(cancellationToken); - _db._entityChangeReport.AddRange(data.Select(a => new DbContext.EntityChangeReport.ChangeInfo { - Object = a.Value, - BeforeObject = _states.TryGetValue(a.Key, out var beforeVal) ? CreateEntityState(beforeVal.Value).Value : null, - Type = DbContext.EntityChangeType.Update + _db._entityChangeReport.AddRange(data.Select(a => new DbContext.EntityChangeReport.ChangeInfo + { + EntityType = _entityType, + Object = a.Value, + BeforeObject = _states.TryGetValue(a.Key, out var beforeVal) ? CreateEntityState(beforeVal.Value).Value : null, + Type = DbContext.EntityChangeType.Update })); foreach (var newval in data) @@ -471,7 +473,7 @@ namespace FreeSql { if (dels.Any() == false) return 0; var affrows = await this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrowsAsync(cancellationToken); - _db._entityChangeReport.AddRange(dels.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Delete })); + _db._entityChangeReport.AddRange(dels.Select(a => new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = a.Value, Type = DbContext.EntityChangeType.Delete })); return affrows; } async public Task RemoveAsync(Expression> predicate, CancellationToken cancellationToken = default) diff --git a/FreeSql.DbContext/DbSet/DbSetSync.cs b/FreeSql.DbContext/DbSet/DbSetSync.cs index cc6f8a3e..f17eee5d 100644 --- a/FreeSql.DbContext/DbSet/DbSetSync.cs +++ b/FreeSql.DbContext/DbSet/DbSetSync.cs @@ -24,7 +24,7 @@ namespace FreeSql { if (adds.Any() == false) return 0; var affrows = this.OrmInsert(adds.Select(a => a.Value)).ExecuteAffrows(); - _db._entityChangeReport.AddRange(adds.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Insert })); + _db._entityChangeReport.AddRange(adds.Select(a => new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = a.Value, Type = DbContext.EntityChangeType.Insert })); return affrows; } @@ -51,7 +51,7 @@ namespace FreeSql var idtval = this.OrmInsert(data).ExecuteIdentity(); IncrAffrows(1); _db.OrmOriginal.SetEntityValueWithPropertyName(_entityType, data, _tableIdentitys[0].CsName, idtval); - _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert }); + _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = data, Type = DbContext.EntityChangeType.Insert }); Attach(data); if (_db.Options.EnableCascadeSave) AddOrUpdateNavigate(data, true, null); @@ -60,7 +60,7 @@ namespace FreeSql { DbContextFlushCommand(); var newval = this.OrmInsert(data).ExecuteInserted().First(); - _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = newval, Type = DbContext.EntityChangeType.Insert }); + _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = newval, Type = DbContext.EntityChangeType.Insert }); IncrAffrows(1); _db.OrmOriginal.MapEntityValue(_entityType, newval, data); Attach(newval); @@ -75,7 +75,7 @@ namespace FreeSql var idtval = this.OrmInsert(data).ExecuteIdentity(); IncrAffrows(1); _db.OrmOriginal.SetEntityValueWithPropertyName(_entityType, data, _tableIdentitys[0].CsName, idtval); - _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert }); + _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = data, Type = DbContext.EntityChangeType.Insert }); Attach(data); if (_db.Options.EnableCascadeSave) AddOrUpdateNavigate(data, true, null); @@ -117,7 +117,7 @@ namespace FreeSql DbContextFlushCommand(); var rets = this.OrmInsert(data).ExecuteInserted(); if (rets.Count != data.Count()) throw new Exception(DbContextStrings.SpecialError_BatchAdditionFailed(_db.OrmOriginal.Ado.DataType)); - _db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a, Type = DbContext.EntityChangeType.Insert })); + _db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = a, Type = DbContext.EntityChangeType.Insert })); var idx = 0; foreach (var s in data) _db.OrmOriginal.MapEntityValue(_entityType, rets[idx++], s); @@ -277,7 +277,7 @@ namespace FreeSql foreach (var midWhere in midWheres) delall.Where(midWhere); var sql = delall.ToSql(); delall.ExecuteAffrows(); - _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw }); + _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = sql, Type = DbContext.EntityChangeType.SqlRaw }); } else //保存 { @@ -440,6 +440,7 @@ namespace FreeSql var affrows = update.ExecuteAffrows(); _db._entityChangeReport.AddRange(data.Select(a => new DbContext.EntityChangeReport.ChangeInfo { + EntityType = _entityType, Object = a.Value, BeforeObject = _states.TryGetValue(a.Key, out var beforeVal) ? CreateEntityState(beforeVal.Value).Value : null, Type = DbContext.EntityChangeType.Update @@ -512,7 +513,7 @@ namespace FreeSql { if (dels.Any() == false) return 0; var affrows = this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrows(); - _db._entityChangeReport.AddRange(dels.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Delete })); + _db._entityChangeReport.AddRange(dels.Select(a => new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = a.Value, Type = DbContext.EntityChangeType.Delete })); return affrows; //https://github.com/dotnetcore/FreeSql/issues/373 } diff --git a/FreeSql.DbContext/Repository/Repository/BaseRepository.cs b/FreeSql.DbContext/Repository/Repository/BaseRepository.cs index f554860e..6d50b459 100644 --- a/FreeSql.DbContext/Repository/Repository/BaseRepository.cs +++ b/FreeSql.DbContext/Repository/Repository/BaseRepository.cs @@ -90,7 +90,7 @@ namespace FreeSql var delete = _dbset.OrmDeleteInternal(null).Where(predicate); var sql = delete.ToSql(); var affrows = delete.ExecuteAffrows(); - _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw }); + _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { EntityType = EntityType, Object = sql, Type = DbContext.EntityChangeType.SqlRaw }); return affrows; } public virtual int Delete(TEntity entity) diff --git a/FreeSql.DbContext/Repository/Repository/BaseRepositoryAsync.cs b/FreeSql.DbContext/Repository/Repository/BaseRepositoryAsync.cs index c60dc03c..6960ec56 100644 --- a/FreeSql.DbContext/Repository/Repository/BaseRepositoryAsync.cs +++ b/FreeSql.DbContext/Repository/Repository/BaseRepositoryAsync.cs @@ -19,7 +19,7 @@ namespace FreeSql var delete = _dbset.OrmDeleteInternal(null).Where(predicate); var sql = delete.ToSql(); var affrows = await delete.ExecuteAffrowsAsync(cancellationToken); - _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw }); + _db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { EntityType = EntityType, Object = sql, Type = DbContext.EntityChangeType.SqlRaw }); return affrows; } public virtual Task DeleteAsync(TEntity entity, CancellationToken cancellationToken = default)