/// <summary> /// Retorna todos os registro de uma tabela historificada (registros normais e os que foram excluidos lógicamente). /// Para isso a entidade tem que ter o atributo Historificar definido na sua classe, caso contrário, o método retorna a lista inteira /// </summary> /// <returns>Retorna uma lista com todos os registros</returns> public IEnumerable <TEntity> GetHistory() { HistorificarAttribute historificarAttribute = (HistorificarAttribute)Attribute.GetCustomAttribute(Entities.FirstOrDefault().GetType(), typeof(HistorificarAttribute)); if (historificarAttribute == null) { return(Entities); } return(Where(e => EF.Property <bool>(e, "deletado") || !EF.Property <bool>(e, "deletado")).IgnoreQueryFilters()); }
public override int SaveChanges() { IEnumerable <EntityEntry> entries = ChangeTracker.Entries().Where(e => e.State != EntityState.Unchanged && e.State != EntityState.Detached); IServiceProvider serviceProvider = this.GetService <IServiceProvider>(); List <Auditoria> auditorias = new List <Auditoria>(); foreach (EntityEntry entry in entries) { AuditarAttribute auditarAttribute = (AuditarAttribute)Attribute.GetCustomAttribute(entry.Entity.GetType(), typeof(AuditarAttribute)); HistorificarAttribute historificarAttribute = (HistorificarAttribute)Attribute.GetCustomAttribute(entry.Entity.GetType(), typeof(HistorificarAttribute)); ValidationContext validationContext = new ValidationContext(entry.Entity, serviceProvider, new Dictionary <object, object>()); List <ValidationResult> results = new List <ValidationResult>(); if (auditarAttribute != null) { AuditarAcao(entry, auditorias); } if (historificarAttribute != null) { if (entry.State == EntityState.Deleted) { entry.Property("deletado").CurrentValue = true; entry.State = EntityState.Modified; } } if (!Validator.TryValidateObject(entry.Entity, validationContext, results, true)) { foreach (ValidationResult result in results) { if (result != ValidationResult.Success) { throw new ValidationException(result.ErrorMessage); } } } } Auditorias.AddRange(auditorias); return(base.SaveChanges()); }
protected override void OnModelCreating(ModelBuilder modelBuilder) { foreach (IMutableEntityType entity in modelBuilder.Model.GetEntityTypes()) { HistorificarAttribute historificarAttribute = (HistorificarAttribute)Attribute.GetCustomAttribute(entity.ClrType, typeof(HistorificarAttribute)); if (historificarAttribute != null) { entity.AddProperty("deletado", typeof(bool)); } } //Adiciona a tabela auditar no banco modelBuilder.ApplyConfiguration(new AuditoriaMap()); base.OnModelCreating(modelBuilder); }