更新行时可以使用乐观锁定。一种方法是在所有表格中添加版本列。这可能只是一个整数。基本上当你第一次查询一行时,你会得到Version
列的初始值。然后,在更新该行时,将版本放入其中子句,然后还将版本与其他字段一起更新。
UPDATE Product
SET Version = 2 /* The incremented version */,
Name = 'UpdatedName',
Description = 'UpdatedDescription'
WHERE Id = 'SomeUniqueIdXXXX'
AND Version = 1 /* The initial version */
第一次更新会成功,如果他们使用过时版下一个更新到同一行会失败。您的应用程序应该能够处理失败并按您想要的方式继续(例如显示错误消息等)。如果您不想修改所有表格以包含版本列,则可以使用下一种技术。基本上,你把所有的原始值作为其中子句的一部分:
UPDATE
Product
SET Name = 'UpdatedName'
WHERE Id = 'SomeUniqueIdXXXX'
AND Name = 'OriginalName'
AND Description = 'OriginalDescription'
如果您正在使用NHibernate,这些技术可以自动为您根据您设置的映射完成。
我不认为你的问题很清楚。资源对许多不同的人来说可能意味着很多不同的东西。你能发表一个更具体的例子吗? – 2011-08-17 10:42:48