通常,在断开连接的环境中,使用/的乐观并发是首选方法。WCF确实支持分布式事务,但这是在系统中引入冗长阻塞的好方法。大多数 ORM 工具将支持/开箱即用。rowversiontimestamprowversiontimestamp
当然,在服务器上,您可能希望使用事务(基于连接或TransactionScope)来使单个存储库方法“ACID”,但我会尽量避免在线上的事务。
重新评论;对此感到抱歉,老实说,我没有看到这些评论;如果您一次收到很多评论,有时 stackoverflow 不会让这变得容易。这里有两个不同的概念;等待是阻塞的症状,但如果您有 100 个客户端更新同一记录,则在每个事务期间阻塞是完全合适的。为简单起见:除非我能证明瓶颈(需要额外的工作),否则我将从围绕更新操作的可序列化TransactionScope事务开始(默认使用此事务)。这样是可以的:在大多数情况下,您都会获得适当的阻塞(ACID 等)。
然而; 第二个问题是并发性:如果您对同一条记录进行 100 次更新,您怎么知道该信任哪个?大多数系统会允许第一次更新,并丢弃其余的,因为它们对数据的假设是陈旧的。这就是时间戳/行版本的用武之地。通过在 UPDATE 语句中强制执行“时间戳/行版本必须匹配”,您可以确保人们只能更新自拍摄快照以来未更改的数据。为此,将 rowversion 与您正在更新的任何有趣数据一起保存是很常见的。