簡體   English   中英

共享資源和並發用戶 - .NET 中的最佳實踐?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM