我正在實施一項服務,允許用戶瀏覽各種對象,添加新對象並保存它們,這是一項非常基本的功能。該服務通過WCF提供,並首先使用EF4代碼訪問SQL Server數據庫的數據。使用wcf服務實現鎖定/編輯/解鎖
但有一個問題:有一些規則應該讓一個用戶一次只能處理一個對象,因此標題中提到的鎖定編輯解鎖行爲。
所以我們可以說有一個過濾器說:「在日期X和日期Y之間的時間戳記錄」。現在用戶鎖定了這個「過濾器」,並且是唯一可以添加日期X和日期Y之間的時間範圍的新記錄(注意:不會修改!)。
還值得注意的是,過濾器不是我可以訪問的物理實體,因爲實際上可能具有無限可能的過濾器。因此「選擇更新」/行鎖是不可能的(我想!)。此外,過濾器僅在固定的時間範圍步驟中可用,所以過濾器沒有重疊,但對鎖定未來(或過去)的距離沒有限制。
我想出了一個迄今爲止工作的解決方案,但我對此並不滿意。我喜歡有,而不是某個數據庫實現這個在我的服務代碼,但任何建議,歡迎:
當用戶請求一個鎖,我首先檢查是否已經有一個符合過濾器的對象並有一個「鎖定」時間戳集。如果有的話,另一個鎖是不可能的。如果沒有,我創建一個新記錄,並保存它以獲得一個「處理」(一些id)到這個記錄傳回給客戶端。在我這樣做之前,我再次運行查詢,並且如果我收到多個具有「鎖定」時間戳集的時間範圍的記錄,那麼包含例如「最高的ID將被視爲實際鎖定,所有其他記錄將被刪除。我不認爲這是特別乾淨,所以我真的不想使用它。
我也想過使用WCF的operationcontract屬性只允許在任何時候一次調用,但我不喜歡這一點。
因此,每個過濾器實際上是對這個數據庫的查詢,對嗎? – Chris 2012-07-09 13:17:27
@Chris是的,你是對的! – UrbanEsc 2012-07-09 15:00:33
如果有兩個過濾器觸及相同的記錄,會發生什麼情況?你如何決定哪個過濾器獲得記錄? – Chris 2012-07-09 17:21:05