Merge pull request #1171 from dotnetcore/dbcontext-auditlog

#1170 DbContext,仓储 审计日志ChangeInfo增加实体类型 EntityType
This commit is contained in:
2881099 2022-06-28 08:37:15 +08:00 committed by GitHub
commit bc69f018e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 27 additions and 20 deletions

View File

@ -263,6 +263,10 @@ namespace FreeSql
/// </summary> /// </summary>
public object BeforeObject { get; set; } public object BeforeObject { get; set; }
public EntityChangeType Type { get; set; } public EntityChangeType Type { get; set; }
/// <summary>
/// 实体类型
/// </summary>
public Type EntityType { get; set; }
} }
/// <summary> /// <summary>
/// 实体变化记录 /// 实体变化记录

View File

@ -26,7 +26,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(cancellationToken); 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; return affrows;
} }
@ -53,7 +53,7 @@ namespace FreeSql
var idtval = await this.OrmInsert(data).ExecuteIdentityAsync(cancellationToken); var idtval = await this.OrmInsert(data).ExecuteIdentityAsync(cancellationToken);
IncrAffrows(1); IncrAffrows(1);
_db.OrmOriginal.SetEntityValueWithPropertyName(_entityType, data, _tableIdentitys[0].CsName, idtval); _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); Attach(data);
if (_db.Options.EnableCascadeSave) if (_db.Options.EnableCascadeSave)
await AddOrUpdateNavigateAsync(data, true, null, cancellationToken); await AddOrUpdateNavigateAsync(data, true, null, cancellationToken);
@ -62,7 +62,7 @@ namespace FreeSql
{ {
await DbContextFlushCommandAsync(cancellationToken); await DbContextFlushCommandAsync(cancellationToken);
var newval = (await this.OrmInsert(data).ExecuteInsertedAsync(cancellationToken)).First(); 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); IncrAffrows(1);
_db.OrmOriginal.MapEntityValue(_entityType, newval, data); _db.OrmOriginal.MapEntityValue(_entityType, newval, data);
Attach(newval); Attach(newval);
@ -77,7 +77,7 @@ namespace FreeSql
var idtval = await this.OrmInsert(data).ExecuteIdentityAsync(cancellationToken); var idtval = await this.OrmInsert(data).ExecuteIdentityAsync(cancellationToken);
IncrAffrows(1); IncrAffrows(1);
_db.OrmOriginal.SetEntityValueWithPropertyName(_entityType, data, _tableIdentitys[0].CsName, idtval); _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); Attach(data);
if (_db.Options.EnableCascadeSave) if (_db.Options.EnableCascadeSave)
await AddOrUpdateNavigateAsync(data, true, null, cancellationToken); await AddOrUpdateNavigateAsync(data, true, null, cancellationToken);
@ -115,7 +115,7 @@ namespace FreeSql
await DbContextFlushCommandAsync(cancellationToken); await DbContextFlushCommandAsync(cancellationToken);
var rets = await this.OrmInsert(data).ExecuteInsertedAsync(cancellationToken); var rets = await this.OrmInsert(data).ExecuteInsertedAsync(cancellationToken);
if (rets.Count != data.Count()) throw new Exception(DbContextStrings.SpecialError_BatchAdditionFailed(_db.OrmOriginal.Ado.DataType)); 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; var idx = 0;
foreach (var s in data) foreach (var s in data)
_db.OrmOriginal.MapEntityValue(_entityType, rets[idx++], s); _db.OrmOriginal.MapEntityValue(_entityType, rets[idx++], s);
@ -266,7 +266,7 @@ namespace FreeSql
foreach (var midWhere in midWheres) delall.Where(midWhere); foreach (var midWhere in midWheres) delall.Where(midWhere);
var sql = delall.ToSql(); var sql = delall.ToSql();
await delall.ExecuteAffrowsAsync(cancellationToken); 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 //保存 else //保存
{ {
@ -404,7 +404,9 @@ namespace FreeSql
var update = this.OrmUpdate(null).SetSource(data.Select(a => a.Value)).IgnoreColumns(cuig); var update = this.OrmUpdate(null).SetSource(data.Select(a => a.Value)).IgnoreColumns(cuig);
var affrows = await update.ExecuteAffrowsAsync(cancellationToken); var affrows = await update.ExecuteAffrowsAsync(cancellationToken);
_db._entityChangeReport.AddRange(data.Select(a => new DbContext.EntityChangeReport.ChangeInfo { _db._entityChangeReport.AddRange(data.Select(a => new DbContext.EntityChangeReport.ChangeInfo
{
EntityType = _entityType,
Object = a.Value, Object = a.Value,
BeforeObject = _states.TryGetValue(a.Key, out var beforeVal) ? CreateEntityState(beforeVal.Value).Value : null, BeforeObject = _states.TryGetValue(a.Key, out var beforeVal) ? CreateEntityState(beforeVal.Value).Value : null,
Type = DbContext.EntityChangeType.Update Type = DbContext.EntityChangeType.Update
@ -471,7 +473,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(cancellationToken); 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; return affrows;
} }
async public Task<int> RemoveAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken = default) async public Task<int> RemoveAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken = default)

View File

@ -24,7 +24,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.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; return affrows;
} }
@ -51,7 +51,7 @@ namespace FreeSql
var idtval = this.OrmInsert(data).ExecuteIdentity(); var idtval = this.OrmInsert(data).ExecuteIdentity();
IncrAffrows(1); IncrAffrows(1);
_db.OrmOriginal.SetEntityValueWithPropertyName(_entityType, data, _tableIdentitys[0].CsName, idtval); _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); Attach(data);
if (_db.Options.EnableCascadeSave) if (_db.Options.EnableCascadeSave)
AddOrUpdateNavigate(data, true, null); AddOrUpdateNavigate(data, true, null);
@ -60,7 +60,7 @@ namespace FreeSql
{ {
DbContextFlushCommand(); DbContextFlushCommand();
var newval = this.OrmInsert(data).ExecuteInserted().First(); 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); IncrAffrows(1);
_db.OrmOriginal.MapEntityValue(_entityType, newval, data); _db.OrmOriginal.MapEntityValue(_entityType, newval, data);
Attach(newval); Attach(newval);
@ -75,7 +75,7 @@ namespace FreeSql
var idtval = this.OrmInsert(data).ExecuteIdentity(); var idtval = this.OrmInsert(data).ExecuteIdentity();
IncrAffrows(1); IncrAffrows(1);
_db.OrmOriginal.SetEntityValueWithPropertyName(_entityType, data, _tableIdentitys[0].CsName, idtval); _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); Attach(data);
if (_db.Options.EnableCascadeSave) if (_db.Options.EnableCascadeSave)
AddOrUpdateNavigate(data, true, null); AddOrUpdateNavigate(data, true, null);
@ -117,7 +117,7 @@ namespace FreeSql
DbContextFlushCommand(); DbContextFlushCommand();
var rets = this.OrmInsert(data).ExecuteInserted(); var rets = this.OrmInsert(data).ExecuteInserted();
if (rets.Count != data.Count()) throw new Exception(DbContextStrings.SpecialError_BatchAdditionFailed(_db.OrmOriginal.Ado.DataType)); 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; var idx = 0;
foreach (var s in data) foreach (var s in data)
_db.OrmOriginal.MapEntityValue(_entityType, rets[idx++], s); _db.OrmOriginal.MapEntityValue(_entityType, rets[idx++], s);
@ -277,7 +277,7 @@ namespace FreeSql
foreach (var midWhere in midWheres) delall.Where(midWhere); foreach (var midWhere in midWheres) delall.Where(midWhere);
var sql = delall.ToSql(); var sql = delall.ToSql();
delall.ExecuteAffrows(); 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 //保存 else //保存
{ {
@ -440,6 +440,7 @@ namespace FreeSql
var affrows = update.ExecuteAffrows(); var affrows = update.ExecuteAffrows();
_db._entityChangeReport.AddRange(data.Select(a => new DbContext.EntityChangeReport.ChangeInfo _db._entityChangeReport.AddRange(data.Select(a => new DbContext.EntityChangeReport.ChangeInfo
{ {
EntityType = _entityType,
Object = a.Value, Object = a.Value,
BeforeObject = _states.TryGetValue(a.Key, out var beforeVal) ? CreateEntityState(beforeVal.Value).Value : null, BeforeObject = _states.TryGetValue(a.Key, out var beforeVal) ? CreateEntityState(beforeVal.Value).Value : null,
Type = DbContext.EntityChangeType.Update Type = DbContext.EntityChangeType.Update
@ -512,7 +513,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.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 return affrows; //https://github.com/dotnetcore/FreeSql/issues/373
} }

View File

@ -90,7 +90,7 @@ namespace FreeSql
var delete = _dbset.OrmDeleteInternal(null).Where(predicate); var delete = _dbset.OrmDeleteInternal(null).Where(predicate);
var sql = delete.ToSql(); var sql = delete.ToSql();
var affrows = delete.ExecuteAffrows(); 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; return affrows;
} }
public virtual int Delete(TEntity entity) public virtual int Delete(TEntity entity)

View File

@ -19,7 +19,7 @@ namespace FreeSql
var delete = _dbset.OrmDeleteInternal(null).Where(predicate); var delete = _dbset.OrmDeleteInternal(null).Where(predicate);
var sql = delete.ToSql(); var sql = delete.ToSql();
var affrows = await delete.ExecuteAffrowsAsync(cancellationToken); 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; return affrows;
} }
public virtual Task<int> DeleteAsync(TEntity entity, CancellationToken cancellationToken = default) public virtual Task<int> DeleteAsync(TEntity entity, CancellationToken cancellationToken = default)