Пример #1
0
        /// <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());
        }
Пример #2
0
        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());
        }
Пример #3
0
        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);
        }