Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between InsertOrMerge and InsertOrReplace TableOperations

I'm using Azure table storage for storing the data. I'm getting confused on when to use insertOrReplace and insertOrMerge. I'm using Azure SDK 1.7.

My understanding on insertOrReplace is replacing entire property of previous entity with new entity if the entity exists. if the new entity doesn't define property or having property value null then that property will be removed on updating.

Whereas in insertOrMerge, old properties will be retained even if the new entity didn't define new properties in new entity. Is my understanding is correct?

like image 915
user145610 Avatar asked Feb 04 '13 11:02

user145610


1 Answers

Yes! Your understanding is correct.

You can test it by running following C# code with a correct connectionString and 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" })); } 

You should end up with a single entity in your table with the following properties:

{   PartitionKey = "partition",   RowKey = "row",   MyString = "randomString",   MySecondString = "randomSecondString" } 
like image 106
George Powell Avatar answered Oct 21 '22 05:10

George Powell