0

假设我有一个传统的销售/库存系统,其 Inventory 对象具有数量属性。

如果我要使用 NHibernate 之类的东西将我的对象的状态持久化回数据库,那么在繁忙的系统中,从 NHibernate 从数据库加载对象并将数量设置为 5 某人可能已经收到系统中的一个 PO 并将数量更新为 10?

因此,当我的代码从该商品的销售中扣除数量时,我可能会将数量设置为 4 而不是 9?

向数据库发布更新,只是说,无论当前的数量是多少,减去 1,这不是更安全吗?

不过,这似乎不太适合对象模型场景。

以前有没有人处理过这类问题?

谢谢

4

1 回答 1

1

您需要将您的读写包装在一个事务中。这正是他们旨在防止的问题,并且许多 ORM 公开了启动和结束事务的能力。

与任何抽象一样,总是存在效率问题。UPDATE count = count - 1 FROM products WHERE product.id = 1 AND product.count > 1ORM 可能不会生成与不需要事务一样高效的 SQL 查询。

于 2013-06-19T18:15:00.147 回答