34得票4回答
使用JPA / Hibernate在无状态应用程序中进行乐观锁定

如何在一个不能保存某个版本实体实例的系统中实现乐观锁定(乐观并发控制)?这实际上是一个非常普遍的情况,但几乎所有的示例都是基于会在请求之间保持已加载的实体实例(在http会话中)的应用程序。 如何以尽可能少API污染的方式实现乐观锁定? 约束条件 该系统基于领域驱动设计原则开发。 客户端/服...

24得票2回答
Entity Framework中的并发异常

在Entity Framework (CF, C#)中调用 SaveChanges / SaveChangesAsync 时,如果出现变更冲突(例如值自上次读取后已更新),那么我应该捕获这两个异常之一:DbUpdateConcurrencyException 或 OptimisticConcu...

22得票2回答
在RAW plpgsql中通过UPDATE语句获取受影响的行数

这个问题已经在这里和这里被问过多次,但是对于我的情况来说,没有一个答案适用,因为我不想在PL/PgSQL函数中执行我的更新语句并使用GET DIAGNOSTICS integer_var = ROW_COUNT。 我必须在原始的SQL语句中完成这个操作。 例如,在MS SQL SERVER中,...

22得票3回答
事件溯源和乐观并发控制

当你想让代码在竞态条件下运行时,常见的做法是使用乐观并发控制(OCC)。根据维基百科: ...在提交之前,每个事务都会验证没有其他事务修改了它读取的数据。如果检查发现有冲突的修改,提交事务将回滚... 一种实现OCC的方法是检查待修改数据的版本。如果版本不同,则表示其他事务已经修改...

14得票5回答
什么是乐观并发失败的良好终端用户消息?

我正试图想出一些好的词来向用户解释乐观并发异常。事实证明这比我想象的要困难得多。到目前为止,我所想到的最好的说法是: 其他人已经修改了您正在处理的记录。他们的新值如下所示。请重新进行您所做的更改。 这种说法让我感觉有点糟糕,肯定有更好的表达方式。你有什么想法吗?

14得票2回答
RESTful API和批量操作

我有一个中间层,它在共享数据库上执行CRUD操作。当我将产品转换为.NET Core时,我认为我也可以考虑使用REST API,因为CRUD应该是它擅长的。看起来REST对单个记录操作是一个很好的解决方案,但当我想删除1000条记录时会发生什么呢? 每个专业的多用户应用程序都将具有某些乐观并...

14得票2回答
StaleObjectStateException 与 OptimisticLockException

当我的应用程序发生乐观锁问题时,它抛出了StaleObjectStateException而不是我预期的OptimisticLockException(根据我的阅读)。没有必要发布代码,因为这是最基本的并发问题——时间戳列中的错误版本。我该如何获得OptimisticLockException...

11得票2回答
Postgres中跨表的乐观并发控制

我正在寻找一种在Postgres中管理跨越多个表的乐观并发控制的方法。同时,我也试图将业务逻辑保持在数据库之外。我的一个表设置大致如下:CREATE TABLE master ( id SERIAL PRIMARY KEY NOT NULL, status VARCHAR NO...

11得票2回答
Entity Framework在PostgreSQL上的RowVersion实现

我正在使用Entity Framework 6与PostgreSQL。我有一个实体,我想要防止并发问题。根据这个文档的说明,我添加了一个带[Timestamp]属性的RowVersion属性,但是在将更改保存到实体后,数据库中的RowVersion列的值仍然保持不变。 [Timestam...

10得票1回答
如何使用EF 5.0 Code First启用并发检查?

我希望在一个原子操作中进行检查-然后更新。我正在使用 dbcontext 来管理事务。我期望如果记录已经被另一个线程修改,则会抛出异常,但没有抛出异常。任何帮助将不胜感激。这是我的输出:Thread-4: Reading... Thread-5: Reading... Thread-5: Up...