Example #1
0
        public void LogChanges(DbContext dbContext, Job job)
        {
            var modifiedEntities = dbContext.ChangeTracker.Entries().Where(p => p.State == EntityState.Modified).ToList();
            var currentDateTime  = DateTime.UtcNow;
            int currentUserId    = (int)HttpContext.Current.Session[Constants.CurrentUserId];
            var createdBy        = ((IReqDataSource)((DataContext)dbContext)).Users.SingleOrDefault(d => d.UserId == currentUserId);

            foreach (var change in modifiedEntities)
            {
                var entityName = job.GetType().Name.Split('_')[0];
                var primaryKey = job.JobId;
                foreach (var prop in change.OriginalValues.PropertyNames)
                {
                    var originalValue = change.OriginalValues[prop] == null ? string.Empty : change.OriginalValues[prop].ToString();
                    //var originalValue = change.GetDatabaseValues().GetValue<object>(prop).ToString();
                    var currentValue = change.CurrentValues[prop] == null ? string.Empty : change.CurrentValues[prop].ToString();
                    if (originalValue != currentValue)
                    {
                        ChangeLog log = new ChangeLog
                        {
                            EntityName      = entityName,
                            PrimaryKeyValue = (int)primaryKey,
                            PropertyName    = prop,
                            OldValue        = originalValue,
                            NewValue        = currentValue,
                            DateChanged     = currentDateTime,
                            LoggedBy        = createdBy.UserName
                        };
                        _logChangeRepository.AddChangeLog(log);
                    }
                }
                _logChangeRepository.Save();
            }
        }