Windows Azure TableServiceContext UndoChanges

时间:2012-04-02 12:31:06

标签: windows azure-storage

当尝试使用RowKey中的非法字符(例如'/')保存对象时,调用时会抛出异常

_tableServiceContext.AddObject(tableName, myEntity);

我收到一个System.Data.Services.Client.DataServiceRequestException,信息“超出范围”,这很容易被阻止(通过阻止或检查非法字符)。

我现在的问题是,如何从这种状态中恢复?在发生这样的错误之后,所有后续的AddObject调用都会失败,大概是因为“损坏的对象”仍然属于上下文。

因此,我正在寻找“UndoChanges”的可能性。

感谢任何提示,谢谢。

P.S .: 我正在寻找一种更好的方法,而不是抛弃上下文或从上下文中删除对象......

1 个答案:

答案 0 :(得分:1)

最好的方法可能是将实体与上下文分离。如果由于某种原因这不是一个选项,您可以使用SaveChangesOption.ContinueOnErrors设置重试保存。例如,

_tableServiceContext.SaveChangesWithRetries(SaveChangesOptions.ContinueOnError);

这基本上一次应用所有更新,而不是批量应用。请注意,它将忽略所有发生的错误,而不仅仅是来自非法实体的错误。