/// <summary> /// Gera o objeto de Log com as altera�oes realizadas no update /// </summary> /// <param name="dbEntityEntry"></param> /// <param name="entityName"></param> /// <param name="primaryKey"></param> private void GeraLogUpdate(EntityEntry dbEntityEntry, string entityName, string primaryKey) { foreach (var prop in dbEntityEntry.OriginalValues.Properties) { var originalValue = (dbEntityEntry.OriginalValues[prop] != null ? dbEntityEntry.OriginalValues[prop].ToString() : ""); var currentValue = (dbEntityEntry.CurrentValues[prop] != null ? dbEntityEntry.CurrentValues[prop].ToString() : ""); if (originalValue == currentValue) { continue; } var log = new LogMeusJogos { Tabela = entityName, Acao = dbEntityEntry.State.ToString(), //Se for uma ação feita por usuário logado ou pelo sistema em background MatriculaUsuario = (_accessor?.HttpContext?.User?.Identity?.Name != null) ? int.Parse(_accessor.HttpContext.User.Identity.Name) : 0, Chaves = primaryKey, NomeColuna = prop.Name, Propriedade = prop.Name, ValorOriginal = originalValue, ValorAtual = currentValue, DtcOcorrencia = DateTime.Now }; Set <LogMeusJogos>().Add(log); } }
public override int SaveChanges() { try { var added = new List <KeyValuePair <object, LogMeusJogos> >(); var entries = ChangeTracker.Entries().Where(x => x.State == EntityState.Added || x.State == EntityState.Modified || x.State == EntityState.Deleted).ToList(); foreach (var dbEntityEntry in entries) { var entityName = dbEntityEntry.Entity.GetType().Name; var primaryKey = GetPrimaryKeyValue(dbEntityEntry); switch (dbEntityEntry.State) { case EntityState.Added: case EntityState.Deleted: var log = new LogMeusJogos { Tabela = entityName, Acao = dbEntityEntry.State.ToString(), MatriculaUsuario = (_accessor?.HttpContext?.User?.Identity?.Name != null) ? int.Parse(_accessor.HttpContext.User.Identity.Name) : 0, Chaves = primaryKey, NomeColuna = "*", Propriedade = "*", ValorOriginal = String.Empty, ValorAtual = String.Empty, DtcOcorrencia = DateTime.Now }; if (dbEntityEntry.State == EntityState.Deleted) { log.ValorOriginal = JsonConvert.SerializeObject(dbEntityEntry.Entity); } Set <LogMeusJogos>().Add(log); if (dbEntityEntry.State != EntityState.Added) { continue; } var kv = new KeyValuePair <object, LogMeusJogos>(dbEntityEntry.Entity, log); added.Add(kv); break; case EntityState.Modified: GeraLogUpdate(dbEntityEntry, entityName, primaryKey); break; } } var result = base.SaveChanges(); UpdateInsertedKey(added); return(result); } catch (Exception ex) { GlobalException.ReturnException(ex); return(0); } }