2012-04-02 74 views
0

當試圖保存使用非法字符的對象(例如「/」)調用Windows Azure的TableServiceContext UndoChanges

_tableServiceContext.AddObject(tableName, myEntity); 

當我得到一個System.Data.Services.Client在RowKey拋出一個異常。 DataServiceRequestException與信息「超出範圍」,這是很容易防止(通過防止或檢查非法字符)。

我現在的問題是,我該如何從這種狀態中恢復?在所有成功的AddObject調用失敗之後出現這樣的錯誤,可能是因爲「損壞的對象」仍然屬於上下文。

因此,我正在尋找「撤消變化」的可能性。

任何提示表示讚賞,謝謝。

P.S: 我在尋找,而不是扔掉上下文或從上下文中刪除對象一個更好的辦法...

回答

1

最好的辦法可能是從上下文分離的實體。如果由於某種原因,這不是一個選項,您可以使用SaveChangesOption.ContinueOnErrors組重試保存。例如,

_tableServiceContext.SaveChangesWithRetries(SaveChangesOptions.ContinueOnError); 

這基本上是一次應用所有更新,而不是批量。請注意,它會忽略所有發生的錯誤,而不僅僅是來自非法實體的錯誤。

+0

從上下文中分離實體正在完成我所需要的,感謝您的快速幫助。 – FrankE 2012-04-03 06:24:08

+0

哦,那好吧。我認爲這不是一種選擇,因爲你不想「從上下文中刪除對象」。 – 2012-04-03 18:34:09