public AuditTrail AuditTrailFactory(DbEntityEntry entry, string userName)
        {
            AuditTrail audit = new AuditTrail();

            audit.RevisionStamp = DateTime.Now;
            audit.TableName     = entry.Entity.GetType().Name;
            audit.UserName      = userName;
            audit.Deleted       = false;
            audit.CreatedBy     = userName;
            audit.CreatedOn     = DateTime.Now;
            audit.UpdatedBy     = userName;
            audit.UpdatedOn     = DateTime.Now;
            //audit.IPAddress = GetIP();
            audit.IPAddress = GetIP4Address();

            if (entry.State == EntityState.Added)
            {
                //entry is Added

                var model = (EntityBase)entry.Entity;
                model.CreatedBy = DataConnector.LoginName;
                model.CreatedOn = DateTime.Now;
                model.UpdatedBy = DataConnector.LoginName;
                model.UpdatedOn = DateTime.Now;

                audit.NewData = GetEntryValueInString(entry, false);
                audit.Actions = AuditAction.C;
            }
            else if (entry.State == EntityState.Deleted)
            {
                //entry in deleted
                audit.OldData = GetEntryValueInString(entry, true);
                audit.Actions = AuditAction.D;
            }
            else
            {
                //entry is modified
                var model = (EntityBase)entry.Entity;
                model.UpdatedBy = DataConnector.LoginName;
                model.UpdatedOn = DateTime.Now;

                audit.OldData = GetEntryValueInString(entry, true);
                audit.NewData = GetEntryValueInString(entry, false);
                audit.Actions = AuditAction.U;

                IEnumerable <string> modifiedProperties = entry.CurrentValues.PropertyNames;
                //assing collection of mismatched Columns name as serialized string
                audit.ChangedColumns = XMLSerializationHelper.XmlSerialize(modifiedProperties.ToArray());
            }

            auditTrailList.Add(audit);

            return(audit);
        }
        public HttpResponseMessage GetAuditTrail(HttpRequestMessage request, int auditTrailId)
        {
            return(GetHttpResponse(request, () =>
            {
                HttpResponseMessage response = null;

                audit.AuditTrail auditTrail = _CoreService.GetAuditTrail(auditTrailId);

                // notice no need to create a seperate model object since AuditTrail entity will do just fine
                response = request.CreateResponse <audit.AuditTrail>(HttpStatusCode.OK, auditTrail);

                return response;
            }));
        }