/// <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); }
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); }
public override void OnAdd <T>(T entity) { EntityAudit entityAudit = entity as EntityAudit; if (entityAudit != null) { entityAudit.CreatedAt = DateTime.Now; } }
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); }
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); }
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); }