| | |
| | | /// <param name="update"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | public static async Task<Guid> SaveData<TEntity, TRequest>( |
| | | public static async Task<TEntity> SaveData<TEntity, TRequest>( |
| | | this TRequest request, |
| | | Func<IQueryable<TEntity>, IQueryable<TEntity>> query = null, |
| | | Expression<Func<TEntity, bool>> checkExist = null, |
| | |
| | | if (update != null) update(entity); |
| | | else request.Adapt(entity); |
| | | await rep.UpdateAsync(entity); |
| | | return entity.Id; |
| | | return entity; |
| | | } |
| | | else |
| | | { |
| | |
| | | if (update != null) update(entity); |
| | | else request.Adapt(entity); |
| | | await rep.InsertAsync(entity); |
| | | return entity.Id; |
| | | return entity; |
| | | } |
| | | } |
| | | |
| | |
| | | continue; |
| | | } |
| | | |
| | | Db.GetRepository<DbAuditLog, LogDbContextLocator>().InsertNow(new DbAuditLog |
| | | var log = new DbAuditLog |
| | | { |
| | | Id = IDGen.NextID(), |
| | | TableName = entityType.Name, |
| | | PrimaryKey = (Guid)entity.Property("Id").CurrentValue, |
| | | NewValues = entity.State == EntityState.Added || entity.State == EntityState.Modified |
| | | ? GetPropertyValuesAsJson(entity) |
| | | : null, |
| | | OldValues = entity.State == EntityState.Deleted || entity.State == EntityState.Modified |
| | | ? GetPropertyValuesAsJson(entity, entity.State == EntityState.Modified) |
| | | : null, |
| | | Operate = entity.State == EntityState.Added |
| | | ? EnumDbAuditOperate.Added |
| | | : entity.State == EntityState.Modified |
| | | ? EnumDbAuditOperate.Modified |
| | | : EnumDbAuditOperate.Deleted, |
| | | TraceId = App.GetTraceId(), |
| | | CreatedTime = DateTime.Now, |
| | | CreatedUserId = logier?.Id, |
| | | CreatedEnterpriseId = logier?.EnterpriseId |
| | | }); |
| | | }; |
| | | log.Operate = |
| | | entity.State == EntityState.Added |
| | | ? EnumDbAuditOperate.Added |
| | | : entity.State == EntityState.Modified |
| | | ? EnumDbAuditOperate.Modified |
| | | : EnumDbAuditOperate.Deleted; |
| | | if (entity.Property(nameof(CommonEntity.IsDeleted)).CurrentValue is bool isDeleted && isDeleted == true) |
| | | { |
| | | log.Operate = EnumDbAuditOperate.Deleted; |
| | | } |
| | | log.NewValues = |
| | | log.Operate == EnumDbAuditOperate.Deleted |
| | | ? null |
| | | : JsonConvert.SerializeObject(entity.Properties |
| | | .Where(p => log.Operate == EnumDbAuditOperate.Modified |
| | | ? p.IsModified |
| | | : true) |
| | | .ToDictionary(p => p.Metadata.Name, p => p.CurrentValue)); |
| | | log.OldValues = |
| | | log.Operate == EnumDbAuditOperate.Added |
| | | ? null |
| | | : JsonConvert.SerializeObject(entity.Properties |
| | | .Where(p => log.Operate == EnumDbAuditOperate.Modified |
| | | ? p.IsModified |
| | | : true) |
| | | .ToDictionary(p => p.Metadata.Name, p => p.OriginalValue)); |
| | | Db.GetRepository<DbAuditLog, LogDbContextLocator>().InsertNow(log); |
| | | } |
| | | } |
| | | |
| | | private static string GetPropertyValuesAsJson(EntityEntry entry, bool getOldValues = false) |
| | | { |
| | | var properties = entry.Properties |
| | | .Where(p => getOldValues ? p.IsModified : true) |
| | | .ToDictionary(p => p.Metadata.Name, p => getOldValues ? p.OriginalValue : p.CurrentValue); |
| | | |
| | | return JsonConvert.SerializeObject(properties); |
| | | } |
| | | } |
| | | } |