2013-02-04 4 views
16

Utilizzo la memoria di tabella di Azure per la memorizzazione dei dati. Mi sto confondendo quando utilizzare insert-or-replace e insert-or-merge. Sto usando Azure SDK 1.7.Differenza tra inserimento o unione di entità e inserimento o sostituzione di entità

La mia comprensione dell'inserimento o della sostituzione sta sostituendo l'intera proprietà dell'entità precedente con una nuova entità se l'entità esiste. se la nuova entità non definisce la proprietà o il valore della proprietà è null, quella proprietà verrà rimossa all'aggiornamento.

Considerando che in insert-or-merge, le vecchie proprietà verranno mantenute anche se la nuova entità non ha definito nuove proprietà nella nuova entità. La mia comprensione è corretta?

Mahender

risposta

16

Sì! La tua comprensione è corretta.

È possibile verificare eseguendo seguente codice C# con una corretta connectionString e tableName:

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" })); 
} 

si dovrebbe finire con una singola entità nella tabella con le seguenti proprietà:

{ 
    PartitionKey = "partition", 
    RowKey = "row", 
    MyString = "randomString", 
    MySecondString = "randomSecondString" 
}