//protected override DbEntityValidationResult ValidateEntity(System.Data.Entity.Infrastructure.DbEntityEntry entityEntry, IDictionary<object, object> items) //{ // var result = new DbEntityValidationResult(entityEntry, new List<DbValidationError>()); // if (entityEntry.Entity is AliasChapterRel && entityEntry.State == EntityState.Added) // { // AliasChapterRel entity = entityEntry.Entity as AliasChapterRel; // if (entity.FirstKnownUseDate > entity.LastKnownUseDate) // { // result.ValidationErrors.Add(new System.Data.Entity.Validation.DbValidationError("FirstKnownUseDate", "Date error.")); // } // } // if (result.ValidationErrors.Count > 0) // { // return result; // } // else // { // return base.ValidateEntity(entityEntry, items); // } //} private DBAudit AuditTrailFactory(ObjectStateEntry entry, int userId) { //var userRepo = new UserRepository(this); //var user = userRepo.Find(userId); DBAudit audit = new DBAudit(); audit.RevisionStamp = DateTime.Now; audit.TableName = entry.EntitySet.Name; audit.KeyValue = (int?)entry.CurrentValues.GetValue(0); audit.UserName = userName; if (entry.State == EntityState.Added) {//entry is Added audit.NewData = GetEntryValueInString(entry, false); audit.Actions = "Added"; } else if (entry.State == EntityState.Deleted) {//entry in deleted audit.OldData = GetEntryValueInString(entry, true); audit.Actions = "Deleted"; } else {//entry is modified //audit.OldData = GetEntryValueInString(entry, true); audit.NewData = GetEntryValueInString(entry, false); audit.Actions = "Modified"; IEnumerable <string> modifiedProperties = entry.GetModifiedProperties(); //assing collection of mismatched Columns name as serialized string audit.ChangedColumns = XMLSerializationHelper.XmlSerialize(modifiedProperties.ToArray()); } return(audit); }
public void Audit(MonkeyWrench.DataClasses.Logic.WebServiceLogin who, string action, params object [] args) { var audit = new DBAudit(); audit.action = string.Format(action, args); audit.person_login = who.User; audit.ip = who.Ip4; audit.stamp = Now; audit.Save(this); }
public override int SaveChanges() { ChangeTracker.DetectChanges(); // Important! ObjectContext ctx = ((IObjectContextAdapter)this).ObjectContext; IEnumerable <ObjectStateEntry> changes = ctx.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified); foreach (ObjectStateEntry stateEntryEntity in changes) { if (stateEntryEntity.EntitySet.Name != "MobileLoginDatas" && stateEntryEntity.EntitySet.Name != "SystemLookUps") //eliminate these tables { if (SessionData.userId != null && SessionData.userId != 0) //execute only after user login { if (!stateEntryEntity.IsRelationship && stateEntryEntity.Entity != null && !(stateEntryEntity.Entity is DBAudit)) { DBAudit audit = new DBAudit(); audit.RevisionStamp = DateTime.Now; audit.UserId = SessionData.userId; audit.TableName = stateEntryEntity.EntitySet.Name; audit.IPAddress = SessionData.clientIpAddress; if (stateEntryEntity.State == EntityState.Added) { //entry is Added audit.Data = DictionaryToJsonConverter(GetEntryValueString(stateEntryEntity, false)); audit.Action = AuditActions.I.ToString(); } else if (stateEntryEntity.State == EntityState.Deleted) { //entry in deleted audit.Data = DictionaryToJsonConverter(GetEntryValueString(stateEntryEntity, true)); audit.Action = AuditActions.D.ToString(); } else { //entry is modified audit.Data = DictionaryToJsonConverter(GetEntryValueString(stateEntryEntity, false)); audit.Action = AuditActions.U.ToString(); } this.Entry(audit).State = System.Data.EntityState.Added; } } } } // } return(base.SaveChanges()); }
protected void Page_Load(object sender, EventArgs e) { GetAuditResponse response; int limit; int page; if (!int.TryParse(Request.QueryString ["limit"], out limit)) { limit = 25; } if (!int.TryParse(Request.QueryString ["page"], out page)) { page = 0; } response = Utils.LocalWebService.GetAuditHistory(Master.WebServiceLogin, limit, limit * page); StringBuilder table = new StringBuilder(); table.AppendLine("<table class='buildstatus'>"); table.AppendLine("<tr><td>Timstamp</td><td>User</td><td>IP</td><td>Action</td></tr>"); for (int i = 0; i < response.AuditEntries.Count; i++) { DBAudit audit = response.AuditEntries [i]; table.Append("<tr>"); table.AppendFormat("<td>{0}</td>", audit.stamp.ToString("yyyy/MM/dd HH:mm:ss UTC")); table.AppendFormat("<td style='text-align: left;'>{0}</td>", audit.person_login); table.AppendFormat("<td style='text-align: left;'>{0}</td>", !string.IsNullOrEmpty(audit.ip) ? audit.ip : "127.0.0.1"); table.AppendFormat("<td style='text-align: left;'>{0}</td>", audit.action); table.AppendLine("</tr>"); } table.AppendLine("</table>"); // Add the pager at the bottom table.AppendLine(GeneratePager(response.Count, page, limit)); auditList.InnerHtml = table.ToString(); }
public override int SaveChanges() { //ChangeTracker.DetectChanges(); // Important! ObjectContext ctx = ((IObjectContextAdapter)this).ObjectContext; userRepo = new UserRepository(this); userId = userRepo.GetUsers(x => x.UserName == userName).FirstOrDefault().Id; List <DBAudit> auditTrailList = new List <DBAudit>(); //handle soft delete. foreach (var stateinfo in this.ChangeTracker.Entries() .Where(e => e.Entity is StateInfo && e.State == EntityState.Deleted)) { stateinfo.State = EntityState.Unchanged; ((StateInfo)stateinfo.Entity).DateDeleted = DateTime.Now; ((StateInfo)stateinfo.Entity).DeletedUserId = userId; } List <ObjectStateEntry> objectStateEntryList = ctx.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted).ToList(); foreach (ObjectStateEntry entry in objectStateEntryList) { if (entry.Entity is StateInfo) { //Update modified if (entry.State == EntityState.Modified || entry.State == EntityState.Added) { ((StateInfo)entry.Entity).DateModified = DateTime.Now; ((StateInfo)entry.Entity).ModifiedUserId = userId; } //Update added if (entry.State == EntityState.Added) { ((StateInfo)entry.Entity).DateCreated = DateTime.Now; ((StateInfo)entry.Entity).DateModified = DateTime.Now; ((StateInfo)entry.Entity).CreatedUserId = userId; ((StateInfo)entry.Entity).ModifiedUserId = userId; } //handle audit log if (!(entry.Entity is DBAudit) && !entry.IsRelationship) { DBAudit audit = this.AuditTrailFactory(entry, userId); auditTrailList.Add(audit); } } } if (auditTrailList.Count > 0) { foreach (var audit in auditTrailList) {//add all audits this.DBAudit.Add(audit); } } //foreach (var stateinfo in this.ChangeTracker.Entries() // .Where(e => e.Entity is StateInfo && e.State == EntityState.Deleted) // .Select(e => e.Entity as StateInfo)) //{ // stateinfo. // stateinfo.DateModified = DateTime.Now; // //stateinfo.CreatedUserId = 1; //} //foreach (var stateinfo in this.ChangeTracker.Entries() // .Where(e => e.Entity is StateInfo && (e.State == EntityState.Added || e.State == EntityState.Modified)) // .Select(e => e.Entity as StateInfo)) //{ // stateinfo.DateModified = DateTime.Now; // //stateinfo.CreatedUserId = 1; //} //foreach (var stateinfo in this.ChangeTracker.Entries() // .Where(e => e.Entity is StateInfo && (e.State == EntityState.Added)) // .Select(e => e.Entity as StateInfo)) //{ // stateinfo.DateCreated = DateTime.Now; // //stateinfo.ModifiedUserId = 1; //} //try //{ int result = base.SaveChanges(); return(result); //} //catch (DbEntityValidationException dbValEx) //{ // var outputLines = new StringBuilder(); // foreach (var eve in dbValEx.EntityValidationErrors) // { // outputLines.AppendFormat( // "{0}: Entity of type \"{1}\" in state \"{2}\" has the following validation errors:" // , DateTime.Now, eve.Entry.Entity.GetType().Name, eve.Entry.State); // foreach (var ve in eve.ValidationErrors) // { // outputLines.AppendFormat("- Property: \"{0}\", Error: \"{1}\"" // , ve.PropertyName, ve.ErrorMessage); // } // } //} //foreach (var stateinfo in this.ChangeTracker.Entries() // .Where(e => e.Entity is StateInfo) // .Select(e => e.Entity as StateInfo)) //{ // stateinfo.IsDirty = false; //} return(0); }