この Web サイトで多くのブログや投稿を読んだ後、SimpleMembershipProvider で RequiresUniqueEmail をオーバーライドしようとすることは、些細なことのための多くのコードのように思えます。
だから私は私がやったことについていくつかのアドバイスを探しています。データベースのメール列に一意のインデックスを追加し、SQL 例外をキャッチする try catch ブロックを作成しました。
ユーザーが投稿した電子メールアドレスの例外メッセージの中を調べて、それが見つかった場合は「電子メールは既に使用されています」というメッセージを返し、それ以外の場合は別のメッセージを返します。
これは私のマシンで機能し、受け取るエラーメッセージは次のとおりです。
Message=Cannot insert duplicate key row in object 'dbo.UserProfile'
with unique index 'idx_UniqueEmail'. The duplicate key value is
(myemail@test.com).
私は経験豊富なプログラマーではないので、フィードバックをいただければ幸いです。
私のコードは以下です。
catch (SqlException e)
{
var errorMessage = e.Message.ToLower();
ModelState.AddModelError("", errorMessage.Contains(model.Email) ? "Sorry the email address is already in use." : "Sorry an error has occured");
}