MVC4Webサイトでのユーザーセッションの開始時にデータベースレコードを作成する必要があるという要件があります。
エントリポイントコントローラの概要は次のようになります。
public ActionResult Index(int userId, int requestId) {
var userInfo = db.GetUserInfo(userId, requestId);
if (userInfo == null) {
userInfo = db.CreateUserInfo(userId, requestId);
}
// rest of code
}
私が見つけたのは、このコードは、非常にまれに重複レコードが作成されるほど完全には信頼できないということです(通常、同じ作成日で、少なくともミリ秒単位で)。(外部の)Webページ/クライアントが2つのほぼ同時にリクエストを生成すると想定することしかできません。
ユーザーが後日(同じクエリ文字列パラメーターを使用して)サイトに戻った場合は、既存のuserInfoレコードを取得するようにします。
テーブルに一意のインデックスを追加することで問題を「修正」できることはわかっていますが、これはおそらくとにかく行う必要がありますが、従うべきより良いパターンがあるかどうかを知りたいですか?