2013-05-22 106 views
0

我開發由4個Web應用程序 和一個窗口服務的n層應用程序,我想有每個HTTP請求的ObjectContext的一個實例或每線程。實體框架:ObjectContext的安全

問題是我應該如何處理在Web應用程序和winservice中都有ObjectContext實例的情況,以及例如在webapp中我正在編輯記錄,在winservice中我正在刪除相同的記錄。有沒有可能兩個進程同時觸及Context.SaveChanges(),如果可能會發生什麼?

回答

0

如果刪除發生第一次出現的更新將拋出異常。否則,更新將成功,然後刪除將成功。

如果你有你在哪裏的情況下,都做了一個選擇,然後更新,然後

線程A選擇

線程B選擇

線程A更新

線程B更新,但通過例外,因爲它檢測到記錄已經改變。

爲此,它使用了被稱爲樂觀併發。當線程b進行更新時,它會在where標準中包含所選的所有值。如果有任何不匹配,則更新不會修改任何記錄,並且EF將引發異常。