Transaction deadlocked SqlMembershipProvider.CreateUser()
<p>We run a small website where We use the standard SqlMembershipProvider and we have a standard CreateUserWizard.</p>

<p>We got an unhandled Exception:</p>

<p>Transaction (Process ID XX) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.</p>

<p>The stack trace is</p>

<p>System.Web.Security.SqlMembershipProvider.<strong>CreateUser</strong>(String username, String password, String email, String passwordQuestion, String passwordAnswer, Boolean isApproved, Object providerUserKey, MembershipCreateStatus&amp; status)</p>

<p>System.Web.UI.WebControls.CreateUserWizard.<strong>AttemptCreateUser</strong>()</p>

<p>Any Idea how to fix this?</p>

<p>There SQL Query is the standard thing:</p>

<pre><code>    ALTER PROCEDURE [dbo].[aspnet_Membership_CreateUser]
        @ApplicationName                        nvarchar(256),
        @UserName                               nvarchar(256),
        @Password                               nvarchar(128),
        @PasswordSalt                           nvarchar(128),
        @Email                                  nvarchar(256),
        @PasswordQuestion                       nvarchar(256),
        @PasswordAnswer                         nvarchar(128),
        @IsApproved                             bit,
        @CurrentTimeUtc                         datetime,
        @CreateDate                             datetime = NULL,
        @UniqueEmail                            int      = 0,
        @PasswordFormat                         int      = 0,
        @UserId                                 uniqueidentifier OUTPUT
    AS
    BEGIN
        DECLARE @ApplicationId uniqueidentifier
        SELECT  @ApplicationId = NULL

        DECLARE @NewUserId uniqueidentifier
        SELECT @NewUserId = NULL

        DECLARE @IsLockedOut bit
        SET @IsLockedOut = 0

        DECLARE @LastLockoutDate  datetime
        SET @LastLockoutDate = CONVERT( datetime, '17540101', 112 )

        DECLARE @FailedPasswordAttemptCount int
        SET @FailedPasswordAttemptCount = 0

        DECLARE @FailedPasswordAttemptWindowStart  datetime
        SET @FailedPasswordAttemptWindowStart = CONVERT( datetime, '17540101', 112 )

        DECLARE @FailedPasswordAnswerAttemptCount int
        SET @FailedPasswordAnswerAttemptCount = 0

        DECLARE @FailedPasswordAnswerAttemptWindowStart  datetime
        SET @FailedPasswordAnswerAttemptWindowStart = CONVERT( datetime, '17540101', 112 )

        DECLARE @NewUserCreated bit
        DECLARE @ReturnValue   int
        SET @ReturnValue = 0

        DECLARE @ErrorCode     int
        SET @ErrorCode = 0

        DECLARE @TranStarted   bit
        SET @TranStarted = 0

        IF( @@TRANCOUNT = 0 )
        BEGIN
            BEGIN TRANSACTION
            SET @TranStarted = 1
        END
        ELSE
            SET @TranStarted = 0

        EXEC dbo.aspnet_Applications_CreateApplication @ApplicationName, @ApplicationId OUTPUT

        IF( @@ERROR &lt;&gt; 0 )
        BEGIN
            SET @ErrorCode = -1
            GOTO Cleanup
        END

        SET @CreateDate = @CurrentTimeUtc

        SELECT  @NewUserId = UserId FROM dbo.aspnet_Users WHERE LOWER(@UserName) = LoweredUserName AND @ApplicationId = ApplicationId
        IF ( @NewUserId IS NULL )
        BEGIN
            SET @NewUserId = @UserId
            EXEC @ReturnValue = dbo.aspnet_Users_CreateUser @ApplicationId, @UserName, 0, @CreateDate, @NewUserId OUTPUT
            SET @NewUserCreated = 1
        END
        ELSE
        BEGIN
            SET @NewUserCreated = 0
            IF( @NewUserId &lt;&gt; @UserId AND @UserId IS NOT NULL )
            BEGIN
                SET @ErrorCode = 6
                GOTO Cleanup
            END
        END

        IF( @@ERROR &lt;&gt; 0 )
        BEGIN
            SET @ErrorCode = -1
            GOTO Cleanup
        END

        IF( @ReturnValue = -1 )
        BEGIN
            SET @ErrorCode = 10
            GOTO Cleanup
        END

        IF ( EXISTS ( SELECT UserId
                      FROM   dbo.aspnet_Membership
                      WHERE  @NewUserId = UserId ) )
        BEGIN
            SET @ErrorCode = 6
            GOTO Cleanup
        END

        SET @UserId = @NewUserId

        IF (@UniqueEmail = 1)
        BEGIN
            IF (EXISTS (SELECT *
                        FROM  dbo.aspnet_Membership m WITH ( UPDLOCK, HOLDLOCK )
                        WHERE ApplicationId = @ApplicationId AND LoweredEmail = LOWER(@Email)))
            BEGIN
                SET @ErrorCode = 7
                GOTO Cleanup
            END
        END

        IF (@NewUserCreated = 0)
        BEGIN
            UPDATE dbo.aspnet_Users
            SET    LastActivityDate = @CreateDate
            WHERE  @UserId = UserId
            IF( @@ERROR &lt;&gt; 0 )
            BEGIN
                SET @ErrorCode = -1
                GOTO Cleanup
            END
        END

        INSERT INTO dbo.aspnet_Membership
                    ( ApplicationId,
                      UserId,
                      Password,
                      PasswordSalt,
                      Email,
                      LoweredEmail,
                      PasswordQuestion,
                      PasswordAnswer,
                      PasswordFormat,
                      IsApproved,
                      IsLockedOut,
                      CreateDate,
                      LastLoginDate,
                      LastPasswordChangedDate,
                      LastLockoutDate,
                      FailedPasswordAttemptCount,
                      FailedPasswordAttemptWindowStart,
                      FailedPasswordAnswerAttemptCount,
                      FailedPasswordAnswerAttemptWindowStart )
             VALUES ( @ApplicationId,
                      @UserId,
                      @Password,
                      @PasswordSalt,
                      @Email,
                      LOWER(@Email),
                      @PasswordQuestion,
                      @PasswordAnswer,
                      @PasswordFormat,
                      @IsApproved,
                      @IsLockedOut,
                      @CreateDate,
                      @CreateDate,
                      @CreateDate,
                      @LastLockoutDate,
                      @FailedPasswordAttemptCount,
                      @FailedPasswordAttemptWindowStart,
                      @FailedPasswordAnswerAttemptCount,
                      @FailedPasswordAnswerAttemptWindowStart )

        IF( @@ERROR &lt;&gt; 0 )
        BEGIN
            SET @ErrorCode = -1
            GOTO Cleanup
        END

        IF( @TranStarted = 1 )
        BEGIN
            SET @TranStarted = 0
            COMMIT TRANSACTION
        END

        RETURN 0

    Cleanup:

        IF( @TranStarted = 1 )
        BEGIN
            SET @TranStarted = 0
            ROLLBACK TRANSACTION
        END

        RETURN @ErrorCode

    END
</code></pre>

<p>Thanks! </p>
