我有一个要求,我需要在我的 MVC 4 网站上的用户会话开始时创建一个数据库记录。
入口点控制器的轮廓如下所示:
public ActionResult Index(int userId, int requestId) {
var userInfo = db.GetUserInfo(userId, requestId);
if (userInfo == null) {
userInfo = db.CreateUserInfo(userId, requestId);
}
// rest of code
}
我发现此代码并不完全可靠,因为偶尔会创建重复记录(通常具有相同的创建日期 - 至少到最接近的毫秒)。我只能假设(外部)网页/客户端生成两个几乎同时的请求。
请注意,如果用户稍后返回站点(使用相同的查询字符串参数),那么我希望他们获取现有的 userInfo 记录。
我知道我可以通过向表中添加唯一索引来“解决”问题,无论如何我可能都需要这样做,但我想知道是否有更好的模式可以遵循?