public CreateUserViewModel CreateUser(string salt, string pass, string encodedPasswordAnswer, string username, string email, string passwordQuestion, object providerUserKey, bool isApproved, bool requiresUniqueEmail, MembershipPasswordFormat passwordFormat)
        {
            var userId = (Guid?)providerUserKey;
            var errorCode = 0;
            bool newUserCreated = false;
            DateTime createDate = DataProviderHelper.RoundToSeconds(DateTime.UtcNow);          
            
            Guid? applicationId;
            CreateApplication(ApplicationName, out applicationId);
            var db = new ProviderDataContext();
            aspnet_User aspnetUser =
                db.aspnet_Users.SingleOrDefault(p => p.LoweredUserName == username && p.ApplicationId == applicationId);
            var newUserId = aspnetUser == null ? (Guid?)null : aspnetUser.UserId;
            if (!newUserId.HasValue)
            {
                try
                {
                    newUserId = aspnet_Users_CreateUser(applicationId, username, false, createDate, newUserId);
                }
                catch (Exception)
                {
                    errorCode = 10;
                }
                newUserCreated = true;
            }
            else
            {
                if (newUserId != userId & userId.HasValue)
                    return new CreateUserViewModel {Status = 6};
            }

            bool membershipExists = db.aspnet_Memberships.Any(p => p.UserId == newUserId);
            if (membershipExists)
                return new CreateUserViewModel { Status = 6 };

            if (requiresUniqueEmail)
            {
                membershipExists =
                    db.aspnet_Memberships.Any(p => p.ApplicationId == applicationId & p.LoweredEmail == email.ToLower());
                if (membershipExists)
                    return new CreateUserViewModel { Status = 7 };
            }

            if (!newUserCreated)
            {
                aspnet_User user = db.aspnet_Users.SingleOrDefault(p => p.UserId == userId);
                user.LastActivityDate = createDate;
            }

            var membership = new aspnet_Membership
            {
                ApplicationId = applicationId.Value,
                UserId = userId.Value,
                Password = pass,
                PasswordSalt = salt,
                Email = email,
                LoweredEmail = email.ToLower(),
                PasswordQuestion = passwordQuestion,
                PasswordAnswer = encodedPasswordAnswer,
                IsApproved = isApproved,
                IsLockedOut = false,
                CreateDate = createDate,
                LastLoginDate = createDate,
                LastPasswordChangedDate = createDate,
                LastLockoutDate = new DateTime(1754,1,1),
                FailedPasswordAttemptCount = 0,
                FailedPasswordAttemptWindowStart = new DateTime(1754,1,1),
                FailedPasswordAnswerAttemptCount = 0,
                FailedPasswordAnswerAttemptWindowStart = new DateTime(1754,1,1)
            };

            db.aspnet_Memberships.InsertOnSubmit(membership);
            db.SubmitChanges();


            if (errorCode < 0 || errorCode > (int)MembershipCreateStatus.ProviderError)
                errorCode = (int)MembershipCreateStatus.ProviderError;

            return new CreateUserViewModel
            {
                Status = errorCode,
                UserId = userId.Value,
                Date = createDate
            };
        }
		private void detach_aspnet_Memberships(aspnet_Membership entity)
		{
			this.SendPropertyChanging();
			entity.aspnet_Application = null;
		}
 partial void Updateaspnet_Membership(aspnet_Membership instance);
 partial void Deleteaspnet_Membership(aspnet_Membership instance);
 partial void Insertaspnet_Membership(aspnet_Membership instance);