private MembershipUser UserToMembershipUser(User user)
 {
     return new MembershipUser(ProviderName, user.Name, user.Id, user.EMail, user.PasswordQuestion, user.Comment, user.Enabled, user.IsLockedOut, SafeDate(user.InsertDate), SafeDate(user.LastLoginDate), SafeDate(user.LastActivityDate), SafeDate(user.LastPasswordChangedDate), SafeDate(user.LockedOutDate));
 }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="username"></param>
        /// <param name="password"></param>
        /// <param name="email"></param>
        /// <param name="passwordQuestion"></param>
        /// <param name="passwordAnswer"></param>
        /// <param name="isApproved"></param>
        /// <param name="providerUserKey">Not used</param>
        /// <param name="status"></param>
        /// <returns></returns>
        public override System.Web.Security.MembershipUser CreateUser(string username, string password, 
                                                                    string email, string passwordQuestion, 
                                                                    string passwordAnswer, bool isApproved, 
                                                                    object providerUserKey, 
                                                                    out System.Web.Security.MembershipCreateStatus status)
        {
            try
            {
                //Validate password
                ValidatePassword(username, password, true);

                using (TransactionScope transaction = new TransactionScope(mConfiguration))
                {
                    UserDataStore dataStore = new UserDataStore(transaction);

                    //Check name
                    if (dataStore.FindByName(ApplicationName, username) != null)
                    {
                        status = MembershipCreateStatus.DuplicateUserName;
                        return null;
                    }

                    //Check email
                    if (RequiresUniqueEmail)
                    {
                        if (email == null || email.Length == 0)
                        {
                            status = MembershipCreateStatus.InvalidEmail;
                            return null;
                        }
                        if (dataStore.FindByEmail(ApplicationName, email).Count > 0)
                        {
                            status = MembershipCreateStatus.DuplicateEmail;
                            return null;
                        }
                    }

                    User user = new User(ApplicationName, username);
                    user.EMail = email;
                    user.ChangePassword(password);
                    user.ChangePasswordQuestionAnswer(passwordQuestion, passwordAnswer);
                    user.Enabled = isApproved;

                    dataStore.Insert(user);

                    transaction.Commit();

                    status = MembershipCreateStatus.Success;
                    return UserToMembershipUser(user);
                }
            }
            catch (CodeInvalidCharsException ex) //this exception is caused by an invalid user Name
            {
                LogException(ex, "CreateUser");
                status = MembershipCreateStatus.InvalidUserName;
                return null;
            }
            catch (MembershipPasswordException ex)
            {
                LogException(ex, "CreateUser");
                status = MembershipCreateStatus.InvalidPassword;
                return null;
            }
            catch (Exception ex)
            {
                LogException(ex, "CreateUser");
                status = MembershipCreateStatus.ProviderError;
                return null;
            }
        }