Difference between Insert Or Merge Entity and Insert Or Replace Entity

user145610 picture user145610 · Feb 4, 2013 · Viewed 13k times · Source

I'm using Azure table storage for storing the data. I'm getting confused on when to use insert-or-replace and insert-or-merge. I'm using Azure SDK 1.7.

My understanding on insert or replace 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 insert-or-merge, old properties will be retained even if the new entity didn't define new properties in new entity. Is my understanding is correct?

Mahender

Answer

George Powell picture George Powell · Feb 6, 2013

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