0

场景:保存函数首先从数据库中的一个表中读取总行数。根据行数,计算出唯一的输入值。该值包含在随后插入到同一个表中的行中。

问题:同一对象的两个实例同时执行保存功能。这里的“相同时间”是应用程序读取数据并将行插入数据库所花费的时间。所以,例如,

  • 用户 A 单击保存按钮 >> 读取表中有 3 行 >> 计算 f(3) 作为新行的唯一输入值 >> 准备新行以插入表中...

  • 用户 B 点击保存按钮 >>(因为用户 A 没有插入新行)读取表中有 3 行 >> 计算 f(3) 不是唯一值(错误!) >> ...

我该如何纠正这种情况?我无法更改数据库事务逻辑,因为不幸的是使用了抽象的 ORM 层。但是,我可以完全控制代码。任何建议都会非常有帮助。

我已经尝试在保存功能周围放置一个 lock() ,但它没有以某种方式帮助。

4

1 回答 1

0

我最终利用数据库生成的 ID(自动增量)来进行计算。由于 rowcount 和 ID 不同步,因此通过将整数添加到新序列以匹配旧序列来调整新的自定义 id。

于 2012-08-02T15:31:56.327 回答