2012-03-09 62 views
0

我想能够提供一个UPDATE方法给我的用户将更新他们指定的记录基于RowKey但它不会添加它,如果RowKey他们通过并不存在。我不希望我的更新做一个添加,如果实体不存在

我的推理是,如果他们错误地发送了一个无效的RowKey,我不希望他们在不知不觉中结束了一个新的实体,而更新了他们打算首先更新的实体。

这里是我的代码的要点(但添加/插入,如果它不存在的实体):

' p below is the entity obj (Inherits from TableServiceEntity) 
' PartitionKey and RowKey are set to values of entity to update 
    MyBase.AttachTo(_tableName, p) 
    MyBase.UpdateObject(p) 
    MyBase.SaveChangesWithRetries(Services.Client.SaveChangesWithOptions.Batch) 

我的问题是,我期待的SaveChanges执行时得到一些异常抛出没有找到匹配PK和RK的实体。相反,添加了新PK,RK组合的实体。

我该如何构造我的代码,以便只有更新完成,并且没有添加如果PK,RK不存在?

回答

0

我相信,如果您调用AttachTo()的三个参数版本,您将获得所需的行为。

MyBase.AttachTo(_tableName, p, "*"); 

但我没有真正尝试过。

+0

如果找不到要更新的实体(“处理此请求时发生错误”,并且Source字段设置为“Microsoft.WindowsAzure.StorageClient”),则SaveChangesWithRetries现在会引发看似非常普遍的异常。 。然而,我之后的关键信息是在InnerException中,您发现状态码= 404(ResourceNotFound)和Source =“System.Data.Services.Client .:这是因为我们试图更新的实体未找到。因此,我在捕捉到的地方添加了一个try catch – Hjalmar 2012-03-10 07:46:02

0

当您尝试更新和不存在的项目(我相信breischl是正确的关于如何避免这种情况),而不是捕捉错误最简单的事情就是运行查询来检查它是否确实先存在。

相关问题