我有一个需求,我需要在我的MVC 4网站的用户会话开始时创建数据库记录。创建MVC会话的唯一记录
的入口点控制器的轮廓看起来是这样的:
public ActionResult Index(int userId, int requestId) {
var userInfo = db.GetUserInfo(userId, requestId);
if (userInfo == null) {
userInfo = db.CreateUserInfo(userId, requestId);
}
// rest of code
}
我所发现的是,这个代码是不是在尽可能多的很ocassionaly重复记录创建(通常具有相同的完全可靠创建日期 - 至少到最近的毫秒)。我只能假设(外部)网页/客户端生成两个几乎同时发出的请求。
请注意,如果用户在日后返回站点(使用相同的查询字符串参数),那么我希望他们拿起现有的userInfo记录。
我知道我可以通过在表中添加一个唯一索引来解决问题,我可能需要做任何事情,但是我想知道是否有更好的模式可以遵循?
这种类型的代码更适合将它添加到'Session_start'事件中的'Global.asax'文件中。通过这种方式,您可以捕获在最初入口点以外的其他地方进入的用户。 –
背后的意图是什么!在if条件下? – tigeronk2
if(!userInfo == null)用于检查记录是否已经存在。如果userInfo为空,则需要新记录。 – Neilski