场景:保存函数首先从数据库中的一个表中读取总行数。根据行数,计算出唯一的输入值。该值包含在随后插入到同一个表中的行中。
问题:同一对象的两个实例同时执行保存功能。这里的“相同时间”是应用程序读取数据并将行插入数据库所花费的时间。所以,例如,
用户 A 单击保存按钮 >> 读取表中有 3 行 >> 计算 f(3) 作为新行的唯一输入值 >> 准备新行以插入表中...
用户 B 点击保存按钮 >>(因为用户 A 没有插入新行)读取表中有 3 行 >> 计算 f(3) 不是唯一值(错误!) >> ...
我该如何纠正这种情况?我无法更改数据库事务逻辑,因为不幸的是使用了抽象的 ORM 层。但是,我可以完全控制代码。任何建议都会非常有帮助。
我已经尝试在保存功能周围放置一个 lock() ,但它没有以某种方式帮助。