protected void ViewAudit_OnPageIndexChanging(object sender, GridViewPageEventArgs e) { TrackPageIndex(); ViewAudit.PageIndex = PageIndex; ViewAudit.DataSource = Session["ViewAuditDataSource"]; ViewAudit.DataBind(); }
protected void ViewButton_Click(object sender, EventArgs e) { var entitySysName = Storage.Select <Entity>(Frame.EntityListAudit.SelectedValue).SystemName; if (entitySysName == "__Empty" || string.IsNullOrEmpty(entitySysName)) { entitySysName = string.Empty; } int userID;// = -1; if (string.IsNullOrEmpty(Frame.UserListAudit.SelectedValue)) { userID = -1; } else { Int32.TryParse(Frame.UserListAudit.SelectedValue, out userID); } var dateFrom = Frame.DateFrom.Text.Replace("T", " "); var dateTo = Frame.DateTo.Text.Replace("T", " "); var query = string.Format("set dateformat ymd;EXEC report.getAudit @entity ='{0}', @userID={1}, @from='{2}', @to='{3}'", entitySysName, userID, dateFrom, dateTo); var dt = QueryToDB(query); Session["ViewAuditDataSource"] = dt; ViewAudit.DataSource = dt; ViewAudit.DataBind(); }
async Task <IEnumerable <Tuple <EntityEntry, AuditTrail> > > AuditNonTemporaryProperties() { Dictionary <string, string> abc = new Dictionary <string, string>(); ChangeTracker.DetectChanges(); var entitiesToTrack = ChangeTracker.Entries().Where(e => !(e.Entity is AuditTrail) && e.State != EntityState.Detached && e.State != EntityState.Unchanged); var a = entitiesToTrack.Where(e => !e.Properties.Any(p => p.IsTemporary)).Select(e => new AuditTrail() { Action = Enum.GetName(typeof(EntityState), e.State), Table = e.Metadata.Relational().TableName, Date = DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss"), KeyValues = JsonConvert.SerializeObject(e.Properties.Where(p => p.Metadata.IsPrimaryKey()).ToDictionary(p => p.Metadata.Name, p => p.CurrentValue).NullIfEmpty()), NewValue = JsonConvert.SerializeObject(e.Properties.Where(p => e.State == EntityState.Added || e.State == EntityState.Modified).ToDictionary(p => p.Metadata.Name, p => p.CurrentValue).NullIfEmpty()), OldValue = JsonConvert.SerializeObject(e.Properties.Where(p => e.State == EntityState.Deleted || e.State == EntityState.Modified).ToDictionary(p => p.Metadata.Name, p => p.OriginalValue).NullIfEmpty()) }).ToList(); List <AuditTrail> lsAuditTrail = new List <AuditTrail>(); foreach (var res in a) { string json = JsonConvert.DeserializeObject(res.OldValue.ToString() == "null" ? "{}" : res.OldValue.ToString()).DetailedCompare(JsonConvert.DeserializeObject(res.NewValue.ToString() == "null" ? "{}" : res.NewValue.ToString())); ViewAudit CompareObject = JsonConvert.DeserializeObject <ViewAudit>(json); AuditTrail auditTrailObj = new AuditTrail(); auditTrailObj.AuditTrailId = Guid.NewGuid().ToString(); auditTrailObj.Action = res.Action; auditTrailObj.Table = res.Table; auditTrailObj.KeyValues = res.KeyValues; auditTrailObj.Date = DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss"); auditTrailObj.OldValue = JsonConvert.SerializeObject(CompareObject.oldValue); auditTrailObj.NewValue = JsonConvert.SerializeObject(CompareObject.newValue); lsAuditTrail.Add(auditTrailObj); } await AuditTrail.AddRangeAsync( lsAuditTrail.Where(p => p.NewValue != "{}" && p.OldValue != "{}").ToList() ); return(entitiesToTrack.Where(e => e.Properties.Any(p => p.IsTemporary)) .Select(e => new Tuple <EntityEntry, AuditTrail>( e, new AuditTrail() { AuditTrailId = Guid.NewGuid().ToString(), Action = Enum.GetName(typeof(EntityState), e.State), Table = e.Metadata.Relational().TableName, Date = DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss"), KeyValues = JsonConvert.SerializeObject(e.Properties.Where(p => p.Metadata.IsPrimaryKey()).ToDictionary(p => p.Metadata.Name, p => p.CurrentValue).NullIfEmpty()), NewValue = JsonConvert.SerializeObject(e.Properties.Where(p => e.State == EntityState.Added || e.State == EntityState.Modified).ToDictionary(p => p.Metadata.Name, p => p.CurrentValue)), OldValue = JsonConvert.SerializeObject(e.Properties.Where(p => e.State == EntityState.Deleted || e.State == EntityState.Modified).ToDictionary(p => p.Metadata.Name, p => p.OriginalValue)) } )).ToList()); }