public CreateUserStatus CreateUser( RegistrationData user,
            [Required( ErrorMessageResourceName = "ValidationErrorRequiredField", ErrorMessageResourceType = typeof( ValidationErrorResources ) )]
            [RegularExpression( "^.*[^a-zA-Z0-9].*$", ErrorMessageResourceName = "ValidationErrorBadPasswordStrength", ErrorMessageResourceType = typeof( ValidationErrorResources ) )]
            [StringLength( 50, MinimumLength = 7, ErrorMessageResourceName = "ValidationErrorBadPasswordLength", ErrorMessageResourceType = typeof( ValidationErrorResources ) )]
            string password )
        {
            if ( user == null )
            {
                throw new ArgumentNullException( "user" );
            }

            // Run this BEFORE creating the user to make sure roles are enabled and the default role
            // will be available
            //
            // If there are a problem with the role manager it is better to fail now than to have it
            // happening after the user is created
            if ( !Roles.RoleExists( UserRegistrationService.DefaultRole ) )
            {
                Roles.CreateRole( UserRegistrationService.DefaultRole );
            }

            // NOTE: ASP.NET by default uses SQL Server Express to create the user database.
            // CreateUser will fail if you do not have SQL Server Express installed.
            MembershipCreateStatus createStatus;
            var membershipUser = Membership.CreateUser( user.UserName, password, user.Email, user.Question, user.Answer, true, null, out createStatus );

            if ( createStatus != MembershipCreateStatus.Success )
            {
                // return new UserContainer(UserRegistrationService.ConvertStatus(createStatus),membershipUser.ProviderUserKey);
                return UserRegistrationService.ConvertStatus( createStatus );
            }

            // Assign it to the default role
            // This *can* fail but only if role management is disabled
            Roles.AddUserToRole( user.UserName, DefaultRole );

            // Set its friendly name (profile setting)
            // This *can* fail but only if Web.config is configured incorrectly
            ProfileBase profile = ProfileBase.Create( user.UserName, true );
            profile.SetPropertyValue( "FriendlyName", user.FriendlyName );
            profile.Save();

            //Insert member
            GetUserIdAndInsertMember( user.UserName, new Guid( membershipUser.ProviderUserKey.ToString() ) );

            //return new UserContainer(CreateUserStatus.Success, membershipUser.ProviderUserKey);

            return CreateUserStatus.Success;
        }
        void OnSaveChanges()
        {
            var data = new RegistrationData();

            try
            {
                data.Answer = UserToInsert.Answer;
                data.Email = UserToInsert.Email;
                data.FriendlyName = UserToInsert.FriendlyName;
                data.Password = UserToInsert.Password;
                data.PasswordConfirmation = UserToInsert.PasswordConfirmation;
                data.Question = UserToInsert.Question;
                data.UserName = UserToInsert.UserName;

                Validator.ValidateProperty(UserToInsert.UserName,
                   new ValidationContext(data, null, null) { MemberName = "UserName" });

                Validator.ValidateProperty(UserToInsert.Email,
                 new ValidationContext(data, null, null) { MemberName = "Email" });

                Validator.ValidateProperty(UserToInsert.Password,
                new ValidationContext(data, null, null) { MemberName = "Password" });

                Validator.ValidateProperty(UserToInsert.PasswordConfirmation,
                new ValidationContext(data, null, null) { MemberName = "PasswordConfirmation" });

                Validator.ValidateProperty(UserToInsert.Question,
               new ValidationContext(data, null, null) { MemberName = "Question" });

                Validator.ValidateProperty(UserToInsert.Answer,
             new ValidationContext(data, null, null) { MemberName = "Answer" });

                if (UserToInsert.Password != UserToInsert.PasswordConfirmation)
                {
                    throw new ValidationException("Password and confirmation are not the same");
                }
            }
            catch (ValidationException ex)
            {
                var member = ((string[])(ex.ValidationResult.MemberNames)).Count() > 0
                                  ? ((string[]) (ex.ValidationResult.MemberNames))[0]
                                  : string.Empty;

                AppMessages.MemberValidationMessage.Send(member + " - " + ex.Message);
                return;
            }

            _userContext.CreateUser(data, UserToInsert.Password, CreationOfMemberCompleted, null);
        }