2013-02-04 6 views
16

私はデータを格納するためにAzureテーブルストレージを使用しています。 insert-or-replaceとinsert-or-mergeをいつ使うべきか混乱しています。私はAzure SDK 1.7を使用しています。エンティティの挿入またはマージとエンティティの挿入または置換の違い

エンティティが存在する場合、挿入または置換に関する私の理解は、以前のエンティティのプロパティ全体を新しいエンティティに置き換えることです。新しいエンティティがプロパティを定義していないか、またはプロパティ値がnullの場合、そのプロパティは更新時に削除されます。

新しいエンティティが新しいエンティティで新しいプロパティを定義しなかった場合でも、挿入またはマージでは古いプロパティが保持されます。私の理解は正しいのですか?

Mahender

答えて

16

はい!あなたの理解は正しいです。

あなたは正しいconnectionStringtableNameと、次のC#のコードを実行することによってそれをテストすることができます。

class MyEntity : TableEntity 
{ 
    public string MyString { get; set; } 
} 

class MySecondEntity : TableEntity 
{ 
    public string MySecondString { get; set; } 
} 

public void MergeTest() 
{ 
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString); 
    CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); 
    CloudTable table = tableClient.GetTableReference(tableName); 
    table.CreateIfNotExists(); 
    // Insert an entity 
    table.Execute(TableOperation.Insert(new MyEntity() 
    { PartitionKey = "partition", RowKey = "row", MyString = "randomString" })); 
    // Merge with a different class 
    table.Execute(TableOperation.InsertOrMerge(new MySecondEntity() 
    { PartitionKey = "partition", RowKey = "row", MySecondString = "randomSecondString" })); 
} 

あなたは次のプロパティを使用してテーブル内の単一のエンティティで終わる必要があります。

{ 
    PartitionKey = "partition", 
    RowKey = "row", 
    MyString = "randomString", 
    MySecondString = "randomSecondString" 
} 
関連する問題