我最近在使用 Microsoft.Azure.Cosmos.Table API,我注意到有一个很棒的方法称为InsertOrMergeOperation,但是,我想知道返回结果是否可以告诉我我的实体是否只是插入或合并/更新操作。我检查了 TableResult 对象,但它没有返回任何有用的信息。
有谁知道这次行动能否给我想要的东西?如果没有,是否有任何其他操作可以执行相同的工作流程?
我最近在使用 Microsoft.Azure.Cosmos.Table API,我注意到有一个很棒的方法称为InsertOrMergeOperation,但是,我想知道返回结果是否可以告诉我我的实体是否只是插入或合并/更新操作。我检查了 TableResult 对象,但它没有返回任何有用的信息。
有谁知道这次行动能否给我想要的东西?如果没有,是否有任何其他操作可以执行相同的工作流程?
TableResule 不返回值来指示它是插入还是合并操作。如果您想获取信息,您有两种方法:
方法一:使用带分区键和行键的表查询来检查表中是否存在记录,然后根据结果是否为空,您知道以下操作是插入或合并,示例代码如下:InsertOrMerge()
CloudTableClient tableClient = account.CreateCloudTableClient();
CloudTable table = tableClient.GetTableReference("People");
TableQuery<CustomerEntity> query = new TableQuery<CustomerEntity>()
.Where(
TableQuery.CombineFilters(
TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "Smith"),
TableOperators.And,
TableQuery.GenerateFilterCondition("Email", QueryComparisons.Equal,"Ben@contoso.com")
));
await table.ExecuteQuerySegmentedAsync<CustomerEntity>(query, null);
方法二:使用try-catch块,先做一个insert操作,如果返回“conflict”错误信息,说明后面的InsertOrMerge()
操作是一个merge操作,代码如下:
TableOperation t1;
try
{
t1 = TableOperation.Insert(customer);
table.Execute(t1);
}
catch (Exception e)
{
if (e.Message.ToLower() == "Conflict".ToLower())
{
t1 = TableOperation.InsertOrMerge(customer);
table.Execute(t1);
}
}
希望能帮助到你。