2012-03-09 10 views
0

RowKeyに基づいて指定したレコードを更新するUPDATEメソッドをユーザーに提供できるようにしたいが、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が存在しない場合は、UPDATEのみを行い、ADDを追加しないようにコードを構造化する方法はありますか?

答えて

0

3つの引数バージョンのAttachTo()を呼び出すと、望ましい動作が得られると思います。

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

しかし、実際には試していません。

+0

これはSaveChangesWithRetriesとして機能し、更新対象のエンティティが見つからない場合(「この要求の処理中にエラーが発生しました」、およびソースフィールドが「Microsoft.WindowsAzure.StorageClient」に設定されている)非常に一般的な例外として表示されます。 。しかし、私が後にした重要な情報は、ステータスコード= 404(ResourceNotFound)とSource = "System.Data.Services.Client:が見つかりましたInnerExceptionにあります。これは、更新しようとしていたエンティティが見つからないためです。そのため、私がキャッチしたtry catchを追加しました – Hjalmar

0

更新しようとするとエラーが発生するのではなく、存在しないアイテムがあります(私はbreischlがそれを回避する方法について正しいと思います)。最も簡単なことは、クエリを実行して、最初に存在する。

関連する問題