Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

azure table storage - 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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...