簡體   English   中英

實體框架的悲觀並發

[英]Pessimistic Concurrency for Entity Framework

在我的項目中,用戶可以根據需要編輯一些數據集。 但是,由於項目規范,一次只能有一個用戶編輯某個數據集/訪問數據集的編輯頁面。 因此,如果用戶A正在編輯數據集1 ,則只要用戶A在該頁面上, 用戶B就不能訪問數據集1的編輯頁面,反之亦然。

我做了一些閱讀和Pessimistic Concurrency似乎是我正在尋找的,一個頁面被“鎖定”,直到該頁面內的用戶離開,這解釋了我的標題。

我仍然是ASP.NET和Web開發的新手。 我想問一下我是否朝着正確的方向前進我的問題,我怎樣才能在我的項目中實現它(我只看到樂觀並發的樣本)以及是否有其他方法,我沒有遇到過,解決我的問題。

首先,我要說的是你的問題是關於數據庫和EF,而不是ASP.NET MVC。 順便說一下,有兩種基本類型的並發控制:

悲觀的並發性將數據鎖定在用戶請求的時間和他保存的時間之間進行更改,以便其他用戶無法在此期間保存更改相同的數據。

沒有鎖定並假設第二個用戶試圖更改數據的樂觀並發不會與第一個用戶保存的更改沖突,但如果存在沖突,則第二個用戶的更改將中止,並且僅保留第一個用戶的更改。
EF不直接支持悲觀並發。

所以我認為最好的選擇是EF支持的樂觀並發,正如您可能知道的那樣,它通過檢查更新前和更新后的數據來確定用戶B是否在用戶A檢索它並更新它之間對其進行了修改。 如果它改變了,則丟棄用戶A的修改,如果沒有,則用戶A的修改被更新到數據庫中。

要實現Optimistic並發,您只需為模型定義RowVersion屬性:

public byte[] RowVersion { get; set; }

在您的模型配置中,您應該告訴EF它在屬性中具有行版本的行為:

Property(p => p.RowVersion).IsRowVersion();

現在,如果用戶A檢索數據,並且用戶B檢索相同數據並且用戶B在用戶A保存其更改之前保存更改,則用戶A的更改將被丟棄並拋出異常:

存儲更新,插入或刪除語句會影響意外的行數(0)。 自實體加載后,實體可能已被修改或刪除。 刷新YourModelName條目。

更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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