Beispiel #1
0
 async Task AuditTemporaryProperties(IEnumerable <Tuple <EntityEntry, Audit> > temporaryEntities)
 {
     try
     {
         if (temporaryEntities != null && temporaryEntities.Any())
         {
             await Audit.AddRangeAsync(
                 temporaryEntities.ForEach(t => t.Item2.KeyValues = JsonConvert.SerializeObject(t.Item1.Properties.Where(p => p.Metadata.IsPrimaryKey()).ToDictionary(p => p.Metadata.Name, p => p.CurrentValue).NullIfEmpty()))
                 .Select(t => t.Item2)
                 );
             await SaveChangesAsync();
         }
         await Task.CompletedTask;
     }
     catch (Exception e)
     {
         //todo wrote log
     }
 }
Beispiel #2
0
        async Task <IEnumerable <Tuple <EntityEntry, Audit> > > AuditNonTemporaryProperties()
        {
            try
            {
                ChangeTracker.DetectChanges();
                var entitiesToTrack = ChangeTracker.Entries().Where(e => !(e.Entity is Audit) && e.State != EntityState.Detached && e.State != EntityState.Unchanged);
                AddTimestamps(entitiesToTrack);
                await Audit.AddRangeAsync(
                    entitiesToTrack.Where(e => !e.Properties.Any(p => p.IsTemporary)).Select(e => new Audit()
                {
                    DateCreated = DateTime.Now.ToUniversalTime(),
                    TableName = e.Metadata.GetTableName(),
                    Action = Enum.GetName(typeof(EntityState), e.State),
                    DateTime = DateTime.Now.ToUniversalTime(),
                    KeyValues = JsonConvert.SerializeObject(e.Properties.Where(p => p.Metadata.IsPrimaryKey()).ToDictionary(p => p.Metadata.Name, p => p.CurrentValue).NullIfEmpty()),
                    NewValues = JsonConvert.SerializeObject(e.Properties.Where(p => e.State == EntityState.Added || e.State == EntityState.Modified).ToDictionary(p => p.Metadata.Name, p => p.CurrentValue).NullIfEmpty()),
                    OldValues = JsonConvert.SerializeObject(e.Properties.Where(p => e.State == EntityState.Deleted || e.State == EntityState.Modified).ToDictionary(p => p.Metadata.Name, p => p.OriginalValue).NullIfEmpty())
                }).ToList()
                    );

                //Return list of pairs of EntityEntry and ToolAudit
                return(entitiesToTrack.Where(e => e.Properties.Any(p => p.IsTemporary))
                       .Select(e => new Tuple <EntityEntry, Audit>(
                                   e,
                                   new Audit()
                {
                    DateCreated = DateTime.Now.ToUniversalTime(),
                    TableName = e.Metadata.GetTableName(),
                    Action = Enum.GetName(typeof(EntityState), e.State),
                    DateTime = DateTime.Now.ToUniversalTime(),
                    NewValues = JsonConvert.SerializeObject(e.Properties.Where(p => !p.Metadata.IsPrimaryKey()).ToDictionary(p => p.Metadata.Name, p => p.CurrentValue).NullIfEmpty())
                }
                                   )).ToList());
            }
            catch (Exception e)
            {
                //todo:write log
            }

            return(null);
        }