0

我目前正在使用代码优先实体框架(5.0)制作一个 ASP.NET MVC4 应用程序。这是我第一个使用 ASP.NET MVC 和实体框架的项目,所以我对一些细节感到不知所措。该应用程序处理超市收银员的交易。

为了在超市进行销售,我有一个可用产品列表和每种产品的可用数量。按照逻辑,任何时候都不应该有给定产品的负数——所以我的问题是,我怎样才能以最好的方式解决并发问题?

发生这种情况时可能会出现问题:

我们有 4 根香蕉可用。出纳员 A 试图卖出 2 根香蕉。收银员 B 试图同时用 3 根香蕉进行销售。如果两个事务都通过,则数据库将保留 -1 香蕉并处于无效状态。

那么防止这种情况的最佳方法是什么?我试图找到几个选项,但我不知道该选择哪一个或它们是否适合:

  1. 添加一个 Rowversion 列,以便仅在未对数据库进行任何更改时进行每个事务。我在这里看到的问题是,可能同时有很多交易,我不知道考虑到我们只需要保留这样严格的支票(每次另一位收银员进行交易时返回错误)是否值得金额为正。即每天可能只有 1-2 笔交易会导致问题,收银员将不得不不断地重新检查他们的销售额。
  2. 在事务中的每个 SaveChanges 之后执行检查,如果项目数量无效,则回滚。

任何帮助,将不胜感激!

4

1 回答 1

0

此约束更容易在数据库中实施。想到的两个选项是(我会选择第二个):

  1. 使用可以检查结果计数 >= 0 的存储过程进行更新
  2. 添加列约束,该列必须 >= 0
于 2013-02-24T08:40:33.877 回答