internal AuditLog CreateLogRecord(EventType eventType, DbContext context) { Type entityType = _dbEntry.Entity.GetType().GetEntityType(); TrackChangesAttribute trackChangesAttribute = entityType.GetCustomAttributes(true).OfType <TrackChangesAttribute>().SingleOrDefault(); if (trackChangesAttribute == null) { return(null); } DateTime changeTime = DateTime.Now; var keyRepresentation = BuildKeyRepresentation(_dbEntry); try { var newlog = new AuditLog { IdUsuario = MAEUserSession.InstanciaCargada? MAEUserSession.Instancia.IdUsuario:1, FechaEvento = changeTime, entityType = eventType, IdClase = (short)trackChangesAttribute.LogAuditoriaClase, IdRegistro = keyRepresentation.Value }; return(newlog); } catch { return(null); } }
internal static TrackingConfigurationValue EntityConfigValueFactory(string key, Type entityType) { TrackChangesAttribute trackChangesAttribute = entityType.GetCustomAttributes(true).OfType <TrackChangesAttribute>().SingleOrDefault(); bool value = trackChangesAttribute != null; return(new TrackingConfigurationValue(value)); }
public static bool IsTrackingEnabled(Type entityType) { TrackChangesAttribute trackChangesAttribute = entityType.GetCustomAttributes(true).OfType <TrackChangesAttribute>().SingleOrDefault(); bool value = trackChangesAttribute != null; return(value); }
private static bool TableTrackerIndicatorFactory(Type type) { Type entityType = type.GetEntityType(); TrackChangesAttribute trackChangesAttribute = entityType.GetCustomAttributes(true).OfType <TrackChangesAttribute>().SingleOrDefault(); return(trackChangesAttribute != null && trackChangesAttribute.Enabled); }
private List <AuditEntry> OnBeforeSaveChanges() { ChangeTracker.DetectChanges(); var auditEntries = new List <AuditEntry>(); foreach (var entry in ChangeTracker.Entries()) { if (entry.Entity is AuditLog || entry.State == EntityState.Detached || entry.State == EntityState.Unchanged) { continue; } Type entityType = entry.Entity.GetType(); TrackChangesAttribute trackChangesAttribute = entityType.GetCustomAttributes(true).OfType <TrackChangesAttribute>().SingleOrDefault(); if (trackChangesAttribute == null) { return(null); } var auditEntry = new AuditEntry(entry); auditEntry.TableName = entry.Metadata.Relational().TableName; auditEntries.Add(auditEntry); foreach (var property in entry.Properties) { if (property.IsTemporary) { // value will be generated by the database, get the value after saving auditEntry.TemporaryProperties.Add(property); continue; } string propertyName = property.Metadata.Name; if (property.Metadata.IsPrimaryKey()) { auditEntry.KeyValues[propertyName] = property.CurrentValue; continue; } if (propertyName.Equals("ConfiguracionSistema") || propertyName.Equals("RolUsuarioItems") || propertyName.Equals("ConfiguracionSistemaUrls") || propertyName.Equals("Pass")) { continue; } switch (entry.State) { case EntityState.Added: auditEntry.NewValues[propertyName] = property.CurrentValue; auditEntry.eventType = EventType.Added; break; case EntityState.Deleted: auditEntry.eventType = EventType.Deleted; auditEntry.OldValues[propertyName] = property.OriginalValue; break; case EntityState.Modified: if (property.IsModified) { auditEntry.OldValues[propertyName] = property.OriginalValue; auditEntry.NewValues[propertyName] = property.CurrentValue; auditEntry.eventType = EventType.Modified; } break; } } } // Save audit entities that have all the modifications foreach (var auditEntry in auditEntries.Where(_ => !_.HasTemporaryProperties)) { var au = auditEntry.ToAudit(this); if (au != null) { Audits.Add(au); } } // keep a list of entries where the value of some properties are unknown at this step return(auditEntries.Where(_ => _.HasTemporaryProperties).ToList()); }