我正在使用Windows Azure表存儲並且有一個簡單的要求:添加一個新行,用該PartitionKey/RowKey覆蓋任何現有行。然而,保存更改總是拋出一個異常,即使我通過在ReplaceOnUpdate選項:添加或替換Azure表中的實體存儲
tableServiceContext.AddObject(TableName, entity);
tableServiceContext.SaveChangesWithRetries(SaveChangesOptions.ReplaceOnUpdate);
如果實體已經存在,它拋出:
System.Data.Services.Client.DataServiceRequestException: An error occurred while processing this request. ---> System.Data.Services.Client.DataServiceClientException: <?xml version="1.0" encoding="utf-8" standalone="yes"?>
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<code>EntityAlreadyExists</code>
<message xml:lang="en-AU">The specified entity already exists.</message>
</error>
我真的不得不手動方式查詢現有排第一,並致電DeleteObject
就可以了?這似乎很慢。當然有更好的方法?
謝謝,我確實考慮過這個問題,但這意味着這段代碼必須知道需要複製的每個屬性(或者實體本身需要一個'CopyTo'方法),並且每當屬性更改時都需要更新它。我想我寧願支付刪除的費用並保證安全。 – EMP 2010-12-17 03:27:57
好吧,我最終這樣做了,儘管我不想。無論我如何嘗試刪除並重新插入實體,它都無法可靠地工作 - 有一次它會成功,下一次失敗時會出現一個錯誤,下一次會失敗並返回另一個錯誤。 – EMP 2011-01-11 21:50:46
我覺得很驚訝。你是否試圖保存添加和刪除作爲一個.Save()調用的一部分,或者你在做.AddObject(); 。保存(); .DeleteObject(); 。保存(); – knightpfhor 2011-01-12 02:37:01