我应该如何为记录的一次更新设置交易

时间:2018-09-20 12:58:58

标签: ado.net isolation-level sqltransaction

我有一个执行每晚计费的Azure工作者角色。因为Azure可以随时创建一个新实例,然后在关闭运行实例之前将其完成,所以我必须通过事务确保该工作人员中只有1个向特定客户收费。给人两次充电往往会使他们不高兴。

所以我有

  1. 创建交易
  2. 阅读客户记录
  3. 如果已对记录收费,请退出
  4. 插入订单(稍后将收取费用)-如果失败,则回滚事务
  5. 写订单记录将客户记录标记为已创建订单
  6. 更新客户记录-如果失败,则回滚事务
  7. 提交交易

客户记录有一个时间戳列。当我更新记录时,我有“ CustomerId = @id和ts = @ts”的位置,因此,如果时间戳更改,更新将失败(返回更新的0行)。

我应该对事务/隔离级别使用什么,以及如何对它进行编码(C#),这样,如果2个工作人员尝试针对同一记录同时执行此操作,则该工作将失败。我进行了更新中的时间戳检查后,标准(无论意味着什么)交易就足够了吗?

还是我需要做一些事情以便读取记录使我完全掌握该记录?如果发生这种情况,当另一个工作人员尝试读取该记录时会发生什么?有例外吗还是暂停直到第一个工作人员提交事务,然后读取成功?

谢谢-戴夫

0 个答案:

没有答案