/// <summary>
        /// Update Profile
        /// </summary>
        /// <param name="userInformation"></param>
        /// <param name="transaction"></param>
        public void UpdateProfile(UserInformation userInformation, out TransactionalInformation transaction)
        {
            transaction = new TransactionalInformation();

            User user = new User();

            try
            {
                user.FirstName = userInformation.FirstName;
                user.LastName  = userInformation.LastName;

                UserBusinessRules userBusinessRules = new UserBusinessRules();
                ValidationResult  results           = userBusinessRules.Validate(user);

                bool validationSucceeded           = results.IsValid;
                IList <ValidationFailure> failures = results.Errors;

                if (validationSucceeded == false)
                {
                    transaction = ValidationErrors.PopulateValidationErrors(failures);
                    return;
                }

                _userDataService.CreateSession();
                _userDataService.BeginTransaction();

                User existingUser = _userDataService.GetUser(userInformation.UserID);
                existingUser.AddressLine1 = userInformation.AddressLine1;
                existingUser.AddressLine2 = userInformation.AddressLine2;
                existingUser.City         = userInformation.City;
                existingUser.State        = userInformation.State;
                existingUser.ZipCode      = userInformation.ZipCode;

                _userDataService.UpdateUser(user);
                _userDataService.CommitTransaction(true);

                transaction.ReturnStatus = true;
                transaction.ReturnMessage.Add("Your profile was successfully updated.");
            }
            catch (Exception ex)
            {
                string errorMessage = ex.Message;
                transaction.ReturnMessage.Add(errorMessage);
                transaction.ReturnStatus = false;
            }
            finally
            {
                _userDataService.CloseSession();
            }

            return;
        }
        /// <summary>
        /// Register User
        /// </summary>
        /// <param name="userInformation"></param>
        /// <param name="transaction"></param>
        /// <returns></returns>
        public User RegisterUser(UserInformation userInformation, out TransactionalInformation transaction)
        {
            transaction = new TransactionalInformation();

            User user = new User();

            try
            {
                user.EmailAddress = userInformation.EmailAddress;
                user.FirstName    = userInformation.FirstName;
                user.LastName     = userInformation.LastName;
                user.Password     = userInformation.Password;
                user.AddressLine1 = string.Empty;
                user.AddressLine2 = string.Empty;
                user.City         = string.Empty;
                user.State        = string.Empty;
                user.ZipCode      = string.Empty;

                UserBusinessRules userBusinessRules = new UserBusinessRules(_userDataService, user, userInformation.PasswordConfirmation);
                ValidationResult  results           = userBusinessRules.Validate(user);

                bool validationSucceeded           = results.IsValid;
                IList <ValidationFailure> failures = results.Errors;

                if (validationSucceeded == false)
                {
                    transaction = ValidationErrors.PopulateValidationErrors(failures);
                    return(user);
                }

                _userDataService.CreateSession();
                _userDataService.BeginTransaction();
                _userDataService.CreateUser(user);
                _userDataService.CommitTransaction(true);

                transaction.ReturnStatus = true;
                transaction.ReturnMessage.Add("user successfully created.");
            }
            catch (Exception ex)
            {
                string errorMessage = ex.Message;
                transaction.ReturnMessage.Add(errorMessage);
                transaction.ReturnStatus = false;
            }
            finally
            {
                _userDataService.CloseSession();
            }

            return(user);
        }