我有一个在 AppHarbor 上运行的 Asp.net MVC 应用程序。它有日常的电子邮件订购流程:
- 用户输入他们的电子邮件并提交。
- 系统处理订单并发送带有链接的电子邮件。
- 用户检查电子邮件并单击链接以执行下一步...
问题是在步骤#2 和#3 之间有很多时间可以过去。有些用户会立即检查他们的电子邮件,有些用户会在一天甚至更晚之后查看。主要是足够的时间可以通过服务器上的应用程序结束。
因此,当用户单击链接时,这可能意味着他们必须等待一段时间才能启动应用程序...
问题
datetime
当步骤 #3 处理数据库中的记录时,会在步骤 #3 发生时使用时间戳(类型当然是)更新。但请理解:我可以看到时间戳完全相同的记录!这怎么可能发生?
时间戳在应用层生成,然后将更新的内容推送到数据库。我正在使用 PetaPoco 进行数据访问。
什么会导致多条记录同时记录?我的应用程序的流量如此之小,以至于它实际上有时会在白天关闭,所以我很难相信多个(最多三个)用户同时执行了第 3 步。而且由于这是在单个进程上运行的,我想这是不可能的......
这可能是什么原因?
更新代码真的很简单
using (var db = this.DataContext)
{
db.Execute(Sql
.Builder
.Append("update dbo.SteppedProcess set Step3ProcessedOn = @0", DateTime.Now)
.Where("Step3ProcessedOn is null")
.Where("Id = @0", id));
}