我正在使用 Azure 表存储来存储数据。我对何时使用insertOrReplace和insertOrMerge感到困惑。我正在使用 Azure SDK 1.7。
我对 insertOrReplace 的理解是,如果实体存在,则用新实体替换先前实体的整个属性。如果新实体未定义属性或属性值为 null,则更新时将删除该属性。
而在 insertOrMerge 中,即使新实体没有在新实体中定义新属性,也会保留旧属性。我的理解正确吗?
我正在使用 Azure 表存储来存储数据。我对何时使用insertOrReplace和insertOrMerge感到困惑。我正在使用 Azure SDK 1.7。
我对 insertOrReplace 的理解是,如果实体存在,则用新实体替换先前实体的整个属性。如果新实体未定义属性或属性值为 null,则更新时将删除该属性。
而在 insertOrMerge 中,即使新实体没有在新实体中定义新属性,也会保留旧属性。我的理解正确吗?
是的!你的理解是正确的。
connectionString
您可以通过使用正确的和运行以下 C# 代码来测试它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" }));
}
您最终应该在表中得到一个具有以下属性的实体:
{
PartitionKey = "partition",
RowKey = "row",
MyString = "randomString",
MySecondString = "randomSecondString"
}