2014-01-06 44 views
5

我剛剛啓用了「併發模式」屬性來修復我的一個實體。Breeze SaveChanges在刪除實體時總是拋出DbUpdateConcurrencyException

當我嘗試更新時,一切正常。

但是,當我嘗試刪除實體,我總是得到這樣的錯誤:

DBUpdateConcurrencyException

商店更新,插入或刪除語句影響了意外 的行數(0) 。自從裝載了實體 以來,實體可能已被修改或刪除。刷新ObjectStateManager條目。

是否有任何方法來禁用DBUpdateConcurrencyException刪除操作?如果不是,我如何管理這種類型的異常?

[HttpPost] 
public SaveResult SaveChanges(JObject saveBundle) 
{ 

    try 
    { 
     return _breezeComponent.SaveChanges(saveBundle); 
    } 
    catch (DbUpdateConcurrencyException ex) 
    {    
     //Workaround needed 
    } 

} 

順便說一句,我已經看過這些類型的解決方案:How to ignore a DbUpdateConcurrencyException when deleting an entity。有什麼方法可以將此代碼與Breeze引擎集成?

編輯: 我已經從版本1.4.5升級到1.4.7,我仍然有同樣的問題。

如果我看一下JSON對象,將entityState從「Deleted」更改爲「Detached」會是一個解決方案嗎? Breeze中有任何設置可以幫助我做到這一點嗎?

{ 
    "entities": [ 
    { 
     "EventId": 11111, 
     "EventName": "Jon Doe", 
     "EventCity": "Montreal", 
     "EventDate": "2014-01-24T00:00:00Z", 
     "TermDate": "2014-01-08T00:00:00Z", 
     "Insertedby": "Terry", 
     "InsertDate": "2014-01-06T14:31:14.197Z", 
     "Updatedby": "Terry", 
     "UpdateDate": "2014-01-07T15:50:53.037Z", 
     "entityAspect": { 
     "entityTypeName": "Event:#Cds.Corpo.GuestList.Models", 
     "defaultResourceName": "Events", 
     "entityState": "Deleted", 
     "originalValuesMap": {}, 
     "autoGeneratedKey": { 
      "propertyName": "EventId", 
      "autoGeneratedKeyType": "Identity" 
     } 
     } 
    } 
    ], 
    "saveOptions": {} 
} 

回答

1

在我們的應用程序框架中隱藏着一種機制,它在更改數據庫之前更新了屬性。所以這不是微風問題。

過濾器現在已添加到解決方案中,以在刪除時排除此模式。

2

只是一個猜測,但是你有沒有打開你的數據庫中的某種形式的級聯刪除。如果是這樣,那麼問題可能是父母的刪除導致孩子也被刪除,並且當微風服務器代碼踢入時,它試圖再次刪除'已經'刪除的孩子。當這個刪除找不到子時,它會拋出併發異常。

避免這種情況的方法是使用BeforeSaveEntities攔截點,並從'saveMap'中刪除所有已刪除實體的子級(這是級聯刪除關係的一部分)。請參閱本頁上的BeforeSaveEntities上的Breeze文檔:http://www.breezejs.com/documentation/contextprovider

+0

好猜,但我沒有級聯刪除,也沒有在我的數據庫中級聯更新。 – Elferone

+0

你正在運行什麼版本的Breeze? –

+0

我目前在版本1.4.5。也許升級到1.4.7會解決問題? – Elferone

相關問題