2011-02-16 99 views
2

我瞭解如何使用實體框架爲單個表進行樂觀併發工作。具有多個表/實體的實體框架併發

但是我想要在多個表中進行樂觀併發的場景呢?爲了說明我的意思,我會用一個例子:

  • 車表
  • 輪表,外鍵車(每車多輪)

我怎樣才能在案件管理併發該服務器在車上添加/移除車輪。

在Car中添加ModifiedTimestamp列可以處理Car的併發更新,但是如何向Car's Wheel發送?

我只能想象通過使用悲觀併發(即 - 將汽車對象鎖定到用戶)解決此問題。但是從我的研究來看,實體框架並不支持悲觀併發。

這只是一個非常簡單的例子,我想知道大家如何解決這種情況。我可以想象,在很多情況下,你有一個實體,它具有相關的實體,並且應該在併發更新方面被視爲一個實體。

回答

1

一種方法總是在Car表中修改一些東西。汽車是你的車輪的根源,因爲沒有汽車的車輪不能存在。如果修改車輪,則修改整個集成對象 - 汽車。因此,添加一些汽車更新來模擬這種行爲 - 通常是維護一些像ModifiedDate這樣的列。

串行化事務支持Pesimistic併發 - 缺省隔離級別爲TransactionScope

+0

我在TransactionScope中遇到的問題是我使用Devart連接器與Oracle數據庫連接。 TransactionScope由Devart連接器轉換爲分佈式事務,這不是我們想要的。我們想要一個本地事務,因爲我們只處理一個數據庫。我們還發現了分佈式轉換的一些主要性能問題。始終更新根目錄是一個很好的想法。謝謝! – Mas 2011-02-16 11:14:10

1

支持悲觀併發性,只需將所有數據訪問權限置於事務範圍內即可。

您可以使用的一個簡單策略是讓最後一個人取得勝利,所有其他更改都會丟失。這並不總是可以接受的。