public override int SaveChanges() { SoftDelete(); AddTimestampInfo(); ProccessChangeTrackerResult proccessChangeTrackerResult = ChangeTrackerAuditService.ProccessChangeTracker(ChangeTracker); if (proccessChangeTrackerResult.RequiresCustomBatch) { using (IDbContextTransaction dbTransaction = Database.BeginTransaction()) { try { int changes = base.SaveChanges(); AuditSubjectData auditSubjectData = _auditDataService.Get(); IEnumerable <AuditEntity> auditEntities = proccessChangeTrackerResult.AuditObjectData .Select(x => new AuditEntity( auditObjectData: x, auditSubjectData: auditSubjectData)); Audit.AddRange(auditEntities); int auditChanges = base.SaveChanges(); dbTransaction.Commit(); return(changes); } catch (Exception ex) { _logger.LogError(ex, $"Failed to perform db transaction"); dbTransaction.Rollback(); throw; } } } else { AuditSubjectData auditSubjectData = _auditDataService.Get(); IEnumerable <AuditEntity> auditEntities = proccessChangeTrackerResult.AuditObjectData .Select(x => new AuditEntity( auditObjectData: x, auditSubjectData: auditSubjectData)); Audit.AddRange(auditEntities); return(base.SaveChanges() - auditEntities.Count()); } }
public override int SaveChanges(bool acceptAllChangesOnSuccess) { ProccessChangeTrackerResult proccessChangeTrackerResult = ChangeTrackerAuditService.ProccessChangeTracker(ChangeTracker, _auditOptions); AuditSubjectData auditSubjectData = _auditSubjectDataService.Get(); IEnumerable <AuditEntity> auditEntities = proccessChangeTrackerResult.AuditObjectData .Select(x => new AuditEntity( auditObjectData: x, auditSubjectData: auditSubjectData)); Audit.AddRange(auditEntities); return(base.SaveChanges()); }
public async override Task <int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default) { ProccessChangeTrackerResult proccessChangeTrackerResult = await ChangeTrackerAuditService.ProccessChangeTrackerAsync(ChangeTracker, _auditOptions); AuditSubjectData auditSubjectData = _auditSubjectDataService.Get(); IEnumerable <AuditEntity> auditEntities = proccessChangeTrackerResult.AuditObjectData .Select(x => new AuditEntity( auditObjectData: x, auditSubjectData: auditSubjectData)); Audit.AddRange(auditEntities); return(await base.SaveChangesAsync()); }
public async override Task <int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken)) { SoftDelete(); AddTimestampInfo(); ProccessChangeTrackerResult proccessChangeTrackerResult = ChangeTrackerAuditService.ProccessChangeTracker(ChangeTracker); if (proccessChangeTrackerResult.RequiresCustomBatch) { using (IDbContextTransaction dbTransaction = await Database.BeginTransactionAsync(cancellationToken)) { try { int changes = base.SaveChanges(); AuditSubjectData auditSubjectData = _auditDataService.Get(); IEnumerable <AuditEntity> auditEntities = proccessChangeTrackerResult.AuditObjectData .Select(x => new AuditEntity( auditObjectData: x, auditSubjectData: auditSubjectData)); Audit.AddRange(auditEntities); int auditChanges = await base.SaveChangesAsync(cancellationToken); #if NET_CORE2 dbTransaction.Commit(); #elif NET_CORE3 await dbTransaction.CommitAsync(cancellationToken); #endif return(changes); } catch (Exception ex) { _logger.LogError(ex, $"Failed to perform db transaction"); #if NET_CORE2 dbTransaction.Rollback(); #elif NET_CORE3 await dbTransaction.RollbackAsync(cancellationToken); #endif throw; } } } else { AuditSubjectData auditSubjectData = _auditDataService.Get(); IEnumerable <AuditEntity> auditEntities = proccessChangeTrackerResult.AuditObjectData .Select(x => new AuditEntity( auditObjectData: x, auditSubjectData: auditSubjectData)); Audit.AddRange(auditEntities); int changes = await base.SaveChangesAsync(cancellationToken); return(changes - auditEntities.Count()); } }