|
1
2
据我所知,你们正试图减少每一个销售操作的产品数量。 你需要原子地这样做,因为你需要避免销售一个没有库存的产品。 有几个选项,如乐观锁(optimatic lock)保留数据的版本,或分布式锁(distributed lock)提供项目的一次购买操作。 在SQL中,可以使用如下版本控制运行update语句:
每个更新都会锁定该行,因此如果另一个更新请求正在执行,它会等待当前更新,并且在执行时会影响0行。 您还可以将分布式锁与redis一起使用,并锁定进程本身。 它取决于需求、用例和您的资源。 更新对于使用实体框架执行此操作,如果首先使用代码,则可以执行以下方法:
使用Fluent API:
或者你可以使用 [并发检查] 属性:
ef将把这些列添加到更新查询中的where条件中。如果受影响的行数为0,则返回ef throw DBUpdateConcurrencyException 你得抓住它。 了解更多信息: https://docs.microsoft.com/en-us/ef/core/modeling/concurrency Optimistic concurrency: IsConcurrencyToken and RowVersion https://www.codeproject.com/Articles/817432/Optimistic-Concurrency-in-Entity-Framework-Code-Fi http://www.binaryintellect.net/articles/14e67064-634c-4206-9eca-a42d3739594a.aspx |
|
|
2
1
您可以尝试其他方法来实现这一点。例如,仅在存在数量时执行更新:
这样,就不需要
|
|
|
Jake · 如何回滚臭鼬事务以进行集成测试?(缺少隐式原点) 1 年前 |
|
|
Riyaz Vagapov · EF核心交易 1 年前 |
|
|
M. Kemp · Oracle删除操作将永远存在 2 年前 |
|
Kuldeep · 我们什么时候应该在数据库中进行交易? 2 年前 |