ASP.NET SqlMembershipProvider: уникальный, но не обязательный адрес электронной почты?

Есть ли способ настроить ASP.NET SqlMembershipProvider так, чтобы электронная почта была необязательной, но когда она указана, должна быть уникальной?

Я нашел только requiredUniqueEmail атрибут (web.config), который делает Email обязательным. Должен ли я оставить это и выполнить проверку существующих адресов электронной почты самостоятельно в процессе регистрации учетной записи?

Или есть более хороший способ справиться с этим сценарием?

1 ответ

Решение

Простой, но, вероятно, рискованный способ - изменить хранимую процедуру напрямую, чтобы сделать это.

изменять aspnet_Membership_CreateUser заменив:

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 (EXISTS (SELECT *
                FROM  dbo.aspnet_Membership m WITH ( UPDLOCK, HOLDLOCK )
                WHERE ApplicationId = @ApplicationId AND LoweredEmail = LOWER(@Email)))
    BEGIN
        SET @ErrorCode = 7
        GOTO Cleanup
    END

Я говорю, что это рискованно, потому что никто не будет ожидать, что вы измените это, и вам лучше хорошо документировать изменения.

Другие вопросы по тегам