private void TrackChanges(List <ChangedProperty> changeList, object target, object id, ChangeTypes changeType)
        {
            ITrackable trackableObject = target as ITrackable;

            if (trackableObject == null || trackableObject.isTracked() == false)
            {
                return;
            }

            if (HttpContext.Current == null)
            {
                return;
            }

            ChangeTracking trackChange = new ChangeTracking();

            if (trackableObject.arePropertiesTracked())
            {
                trackChange.AppendProperties(changeList, trackChange);
            }

            trackChange.ChangeType = new NHibernateDaoFactory().GetChangeTypeDao().GetById((int)changeType, false);

            trackChange.UserName        = HttpContext.Current.User.Identity.Name;
            trackChange.ObjectChanged   = target.GetType().Name;
            trackChange.ObjectChangedID = id == null ? null : id.ToString();

            //Now we have a tracking object with the changed properties added to its change list
            //Make sure it is valid
            if (ValidateBO <ChangeTracking> .isValid(trackChange))
            {
                //Don't put this in a transaction becuase we are already in a transaction from the save/update/delete
                new NHibernateDaoFactory().GetChangeTrackingDao().SaveOrUpdate(trackChange);
            }

            //System.IO.StreamWriter writer = new System.IO.StreamWriter(HttpContext.Current.Server.MapPath("RecruitmentTracking.txt"),true);

            //writer.WriteLine("ChangeID {0} => Object type {1} with ID {2} was modified as follows", Guid.NewGuid(), target.GetType().Name, id.ToString());

            //foreach (ChangedProperty change in changeList)
            //{
            //    //trackChange.PropertyChanged = change.type.Name;
            //    //trackChange.PropertyChangedValue = change.NewValue;

            //    writer.WriteLine("--- Property {0} was changed to {1}", change.PropertyChanged, change.PropertyChangedValue);
            //}

            //writer.Close();
        }