Пример #1
0
        /// <summary>
        /// The restore.
        /// </summary>
        /// <param name="auditRecord">
        /// The audit record.
        /// </param>
        /// <typeparam name="T">
        /// The model that the audit record represents.
        /// </typeparam>
        /// <returns>
        /// The <see cref="T"/>.
        /// </returns>
        public virtual T Restore <T>(EntityAudit auditRecord) where T : class, IAuditable
        {
            var currentEntity = this.Context.Set <T>().FirstOrDefault(e => e.EntityGuid == auditRecord.EntityGuid);

            if (currentEntity == null)
            {
                throw new InvalidDataException("The entity for this audit record cannot be found.");
            }

            EntityAudit record;

            using (var writer = new StringWriter())
            {
                this.Serializer.Serialize(writer, currentEntity);
                record = this.CreateAuditRecord(AuditAction.Restore, writer.ToString(), currentEntity);
            }

            var currentChangeGuid = currentEntity.ChangeGuid;

            var restoredEntity = JsonConvert.DeserializeObject <T>(
                auditRecord.Data,
                new JsonEntityConverter <T>(currentEntity));

            if (currentChangeGuid == restoredEntity.ChangeGuid)
            {
                return(currentEntity);
            }

            this.Context.Entry(restoredEntity).State = EntityState.Modified;

            this.Context.EntityAudit.Add(record);

            this.Context.SaveChangesWithoutProcessing();
            return(restoredEntity);
        }
Пример #2
0
        private EntityAudit GetRecordsForChange(DbEntityEntry dbEntry)
        {
            var metadata = SchemaTableKey(dbEntry);

            var entityAudit = new EntityAudit {
                EventDate = DateTime.Now, TableName = metadata.SchemaTableName
            };

            var detail = new XElement("D");

            switch (dbEntry.State)
            {
            case EntityState.Added:

                foreach (string propertyName in dbEntry.CurrentValues.PropertyNames)
                {
                    var newvalue = dbEntry.CurrentValues.GetValue <object>(propertyName) == null ? null : dbEntry.CurrentValues.GetValue <object>(propertyName).ToString();
                    Column(detail, propertyName, null, newvalue);
                }
                entityAudit.ActionType = ActionTypeAudit.Added;
                entityAudit.RecordId   = string.IsNullOrEmpty(metadata.KeyName) ? "" : dbEntry.CurrentValues.GetValue <object>(metadata.KeyName).ToString();
                break;

            case EntityState.Deleted:
                foreach (string propertyName in dbEntry.OriginalValues.PropertyNames)
                {
                    var originalvalue = dbEntry.GetDatabaseValues().GetValue <object>(propertyName) == null ? null : dbEntry.GetDatabaseValues().GetValue <object>(propertyName).ToString();
                    Column(detail, propertyName, originalvalue, null);
                }

                entityAudit.ActionType = ActionTypeAudit.Deleted;
                entityAudit.RecordId   = string.IsNullOrEmpty(metadata.KeyName) ? "" : dbEntry.GetDatabaseValues().GetValue <object>(metadata.KeyName).ToString();

                break;

            case EntityState.Modified:
                entityAudit.ActionType = ActionTypeAudit.Modified;

                foreach (string propertyName in dbEntry.OriginalValues.PropertyNames)
                {
                    if (!object.Equals(dbEntry.GetDatabaseValues().GetValue <object>(propertyName), dbEntry.CurrentValues.GetValue <object>(propertyName)))
                    {
                        var originalvalue = dbEntry.GetDatabaseValues().GetValue <object>(propertyName) == null ? null : dbEntry.GetDatabaseValues().GetValue <object>(propertyName).ToString();
                        var newvalue      = dbEntry.CurrentValues.GetValue <object>(propertyName) == null ? null : dbEntry.CurrentValues.GetValue <object>(propertyName).ToString();

                        Column(detail, propertyName, originalvalue, newvalue);
                        if (propertyName == "BORRADO" && newvalue == "True")     //Eliminó
                        {
                            entityAudit.ActionType = ActionTypeAudit.Deleted;
                        }
                    }
                }
                entityAudit.RecordId = string.IsNullOrEmpty(metadata.KeyName) ? "" : dbEntry.GetDatabaseValues().GetValue <object>(metadata.KeyName).ToString();

                break;
            }
            entityAudit.Detail = detail;
            return(entityAudit);
        }
Пример #3
0
        public override void OnAdd <T>(T entity)
        {
            EntityAudit entityAudit = entity as EntityAudit;

            if (entityAudit != null)
            {
                entityAudit.CreatedAt = DateTime.Now;
            }
        }
Пример #4
0
 public CoreUnitOfWork(IDbContext context, IRepositoryProvider repositoryProvider, IAuditLog auditLog = null)
 {
     InstanceType       = context.GetType();
     Context            = context;
     RepositoryProvider = repositoryProvider;
     if (auditLog != null)
     {
         this.AuditLog = auditLog;
     }
     EntityAudit = new EntityAudit(context.Database);
 }
Пример #5
0
        public ModelViewAudit Update(ModelViewAudit model)
        {
            EntityAudit data = new EntityAudit()
            {
                ModuleID  = model.ModuleID,
                Action    = model.Action,
                AuditID   = model.AuditID,
                DateAudit = model.DateAudit,
                UserID    = model.UserID
            };

            data = new RepositoryAudit().Update(data);

            return(model);
        }
Пример #6
0
        public ModelViewAudit Insert(ModelViewAudit model)
        {
            model.DateAudit = DateTime.UtcNow;

            EntityAudit data = new EntityAudit()
            {
                ModuleID  = model.ModuleID,
                Action    = model.Action,
                AuditID   = model.AuditID,
                DateAudit = model.DateAudit,
                UserID    = model.UserID
            };

            data = new RepositoryAudit().Insert(data);

            return(model);
        }