更新行時可以使用樂觀鎖定。一種方法是在所有表格中添加版本列。這可能只是一個整數。基本上當你第一次查詢一行時,你會得到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