[英]Shared resource and concurrent users - best practices in .NET?
有一個應用程序主要是關於訪問數據庫。 目前,它只允許單用戶訪問,我需要讓它支持多個並發用戶。 問題是,沒有辦法在這些用戶之間顯式分離資源,所有資源都必須共享:因此,10 個用戶可能會打開資源,然后 1 個用戶可以修改該資源。
是否有任何框架、庫或至少是解決此問題的最佳實踐? 這可能是一個非常流行的問題,所以我相信應該有這些。
更新:“資源”主要是指數據庫中的數據。
更新:更具體地說,當您在 2 個實體之間存在主詳細信息依賴關系時,一個用戶打開它以刪除一些詳細信息,而其他用戶打開它以添加和修改某些內容,這就是所有情況。 第一個刪除了第二個即將修改的數據部分。 然后它發生了。
更新行時可以使用樂觀鎖定。 一種方法是在所有表中添加一個版本列。 這可能只是一個 integer。 基本上,當您第一次查詢一行時,您會得到Version
列的初始值。 然后在更新行時,將初始版本放在where子句中,然后還更新版本以及其他字段。
UPDATE Product
SET Version = 2 /* The incremented version */,
Name = 'UpdatedName',
Description = 'UpdatedDescription'
WHERE Id = 'SomeUniqueIdXXXX'
AND Version = 1 /* The initial version */
第一次更新將成功,如果他們使用過時的版本,則對同一行的下一次更新將失敗。 您的應用程序應該能夠處理故障並按照您想要的方式進行(例如顯示錯誤消息等)。 如果您不想修改所有表以包含Version列,則可以使用下一種技術。 基本上,您將所有原始值作為where子句的一部分:
UPDATE
Product
SET Name = 'UpdatedName'
WHERE Id = 'SomeUniqueIdXXXX'
AND Name = 'OriginalName'
AND Description = 'OriginalDescription'
如果您使用的是 NHibernate,則可以根據您設置映射的方式自動為您完成這些技術。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.