2011-08-17 79 views
1

有一個應用程序主要是關於訪問數據庫。目前,它只允許單用戶訪問,我需要使其支持多個併發用戶。問題是,無法在這些用戶之間明確分離資源,所有資源必須共享:因此,有10個用戶可能會打開該資源,然後1可以修改該資源。共享資源和併發用戶 - .NET中的最佳實踐?

是否有任何框架,庫或解決此問題的最佳做法?這可能是一個非常受歡迎的問題,所以我相信應該有這些。

更新: 通過「資源」我主要是指在數據庫中的數據。

更新: 更具體地講,它的所有有關的情況下,當你有2個實體之間的主信息的依賴,一個用戶打開它去除一些細節問題和其他用戶打開它添加和修改的東西。第一個刪除部分數據,第二個將要修改。然後發生

+0

我不認爲你的問題很清楚。資源對許多不同的人來說可能意味着很多不同的東西。你能發表一個更具體的例子嗎? – 2011-08-17 10:42:48

回答

1

更新行時可以使用樂觀鎖定。一種方法是在所有表格中添加版本列。這可能只是一個整數。基本上當你第一次查詢一行時,你會得到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,這些技術可以自動爲您根據您設置的映射完成。