假设我有一个传统的销售/库存系统,其库存对象具有数量属性。
如果我使用像NHibernate这样的东西将我的对象的状态持久化回数据库,那么在繁忙的系统中,NHibernate从数据库加载对象并将数量设置为5时就不可能了。可以在系统中收到采购订单并将数量更新为10?
因此,当我的代码从销售该项目中扣除数量时,我可能会将数量设置为4而不是9?
对数据库发出更新是否更安全,无论当前数量是多少,都减去1.
但这似乎不适合对象模型场景。
以前是否有人必须处理此类问题?
由于
答案 0 :(得分:1)
您需要在事务中包装读写。这正是它们旨在防止的问题,许多ORM暴露了开始和结束交易的能力。
与任何抽象一样,总是存在效率问题。 ORM可能不会生成与UPDATE count = count - 1 FROM products WHERE product.id = 1 AND product.count > 1
一样有效且不需要事务的SQL查询。