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);
            }
        }
Exemple #2
0
        internal static TrackingConfigurationValue EntityConfigValueFactory(string key, Type entityType)
        {
            TrackChangesAttribute trackChangesAttribute = entityType.GetCustomAttributes(true).OfType <TrackChangesAttribute>().SingleOrDefault();
            bool value = trackChangesAttribute != null;

            return(new TrackingConfigurationValue(value));
        }
Exemple #3
0
        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);
        }
Exemple #5
0
        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());
        }