/// <summary> /// 获取实体状态记录审计日志 /// </summary> /// <param name="Entries"></param> /// <returns></returns> public async Task <List <AuditEntryInputDto> > GetChangeTrackerList(IEnumerable <EntityEntry> Entries) { await Task.CompletedTask; var list = new List <AuditEntryInputDto>(); foreach (var entityEntry in Entries) { var auditentry = new AuditEntryInputDto(); auditentry.TableName = entityEntry.Metadata.GetTableName(); auditentry.EntityAllName = entityEntry.Metadata.Name; auditentry.EntityDisplayName = entityEntry.Entity.GetType().ToDescription(); //auditentry.TableName= switch (entityEntry.State) { case EntityState.Detached: auditentry.OperationType = DataOperationType.None; break; case EntityState.Unchanged: auditentry.OperationType = DataOperationType.None; break; case EntityState.Deleted: auditentry.OperationType = DataOperationType.Delete; break; case EntityState.Modified: auditentry.OperationType = DataOperationType.Update; break; case EntityState.Added: auditentry.OperationType = DataOperationType.Add; break; } var properties = entityEntry.Metadata.GetProperties(); foreach (var propertie in properties) { var AuditPropertys = new AuditPropertysEntryInputDto(); var propertyEntry = entityEntry.Property(propertie.Name);//获取字段名 if (propertyEntry.Metadata.IsPrimaryKey()) { auditentry.KeyValues.Add(propertie.Name, propertyEntry.CurrentValue?.ToString()); } else { AuditPropertys.Properties = propertie.Name; AuditPropertys.NewValues = propertyEntry.CurrentValue?.ToString(); AuditPropertys.OriginalValues = propertyEntry.OriginalValue?.ToString(); AuditPropertys.PropertiesType = propertie.ClrType.FullName; AuditPropertys.PropertieDisplayName = propertyEntry.Metadata.PropertyInfo.ToDescription(); auditentry.PropertysEntryInputDto.Add(AuditPropertys); } } list.Add(auditentry); } return(list); }
/// <summary> /// 得到审计属性 /// </summary> /// <param name="entityEntry"></param> /// <returns></returns> private List <AuditPropertysEntryInputDto> GetAuditPropertys(EntityEntry entityEntry) { List <AuditPropertysEntryInputDto> propertyDtos = new List <AuditPropertysEntryInputDto>(); foreach (var propertie in entityEntry.CurrentValues.Properties.Where(p => !p.IsConcurrencyToken && p.PropertyInfo?.GetCustomAttribute <DisableAuditingAttribute>() == null)) { var propertyEntry = entityEntry.Property(propertie.Name);//获取字段名 AuditPropertysEntryInputDto propertyDto = new AuditPropertysEntryInputDto(); propertyDto.Properties = propertie.Name; propertyDto.PropertieDisplayName = propertyEntry.Metadata.PropertyInfo?.ToDescription(); propertyDto.PropertiesType = propertie.ClrType.FullName; if (propertie.IsPrimaryKey()) { continue; } if (entityEntry.State == EntityState.Added) { var currentValue = propertyEntry.CurrentValue?.ToString(); propertyDto.NewValues = currentValue; propertyDtos.Add(propertyDto); } else if (entityEntry.State == EntityState.Modified) { var originalValue = propertyEntry.OriginalValue?.ToString(); var currentValue = propertyEntry.CurrentValue?.ToString(); if (currentValue != originalValue) { propertyDto.NewValues = currentValue; propertyDto.OriginalValues = originalValue; propertyDtos.Add(propertyDto); } } else if (entityEntry.State == EntityState.Deleted) { var originalValue = propertyEntry.OriginalValue?.ToString(); propertyDto.OriginalValues = originalValue; propertyDtos.Add(propertyDto); } } return(propertyDtos); }