您需要的是optimistic concurrency
在您的UPDATE
声明中,而不是排除某些字段。简而言之,这意味着在更新表时,WHERE
会在语句中附加一个子句,以UPDATE
确保行中字段的值实际上是上次SELECT
运行时的值。
因此,让我们假设在您的示例中,我分别选择了一些数据A
和值。现在假设我想更新(下面的语句只是一个例子):B
1
2
B
UPDATE TestClass SET B = '3' WHERE Id = 1;
但是,不要运行该语句(因为那里没有并发),让我们运行这个:
UPDATE TestClass SET B = '3' WHERE Id = 1 AND A = '1' AND B = '2';
该声明现在确保记录没有被任何人更改。
然而,目前看来 Subsonic 的 SimpleRepository 不支持任何类型的并发,所以这将是一个重大的失败。如果您正在寻找一个非常直接的存储库库,您可以在其中使用 POCO,我会推荐 Dapper。实际上,Stackoverflow 使用了 Dapper。它非常快,并且很容易让您在更新语句中构建并发,因为您发送参数化的 SQL 语句很简单。
- 这篇Stackoverflow 文章是一篇关于如何将 Dapper 用于所有 CRUD 操作的整体文章。
- 这篇Stackoverflow 文章展示了如何使用 Dapper 执行插入和更新。
注意:使用 Dapper,您实际上也可以做您想做的事情,因为您发送基本的 SQL 语句,但我不建议您不使用并发。