Microsoft.Azure.Cosmos.Table - 如果使用 insertOrMergeOperation 插入或合并项目,我如何检索项目操作状态?
Microsoft.Azure.Cosmos.Table - How could I retrieve an item operation status if it is inserted or merged using insertOrMergeOperation?
我最近在使用 Microsoft.Azure.Cosmos.Table API,我注意到有一个很棒的方法叫做 InsertOrMergeOperation,但是,我想知道是否有任何方法可以 return 结果可以告诉我我的实体是刚刚执行了插入操作还是 merge/update 操作。我检查了 TableResult 对象,但它 return 没有关于它的任何有用信息。
有谁知道这个行动能不能给我想要的东西?如果没有,是否有任何其他操作可以执行相同的工作流程?
TableResule 没有 return 一个值来指示它是插入操作还是合并操作。如果你想获取信息,你有两种方法:
方法1:usetable query用partition key和rowkey检查记录是否存在table,你就知道了InsertOrMerge()
之后的操作是根据结果是否为 null 进行插入或合并,示例代码如下:
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);
方法2:usetry-catch块,先做一个插入操作,如果return是一个"conflict"错误信息,说明下面的InsertOrMerge()
操作是合并操作,代码如下:
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);
}
}
希望对您有所帮助。
我最近在使用 Microsoft.Azure.Cosmos.Table API,我注意到有一个很棒的方法叫做 InsertOrMergeOperation,但是,我想知道是否有任何方法可以 return 结果可以告诉我我的实体是刚刚执行了插入操作还是 merge/update 操作。我检查了 TableResult 对象,但它 return 没有关于它的任何有用信息。
有谁知道这个行动能不能给我想要的东西?如果没有,是否有任何其他操作可以执行相同的工作流程?
TableResule 没有 return 一个值来指示它是插入操作还是合并操作。如果你想获取信息,你有两种方法:
方法1:usetable query用partition key和rowkey检查记录是否存在table,你就知道了InsertOrMerge()
之后的操作是根据结果是否为 null 进行插入或合并,示例代码如下:
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);
方法2:usetry-catch块,先做一个插入操作,如果return是一个"conflict"错误信息,说明下面的InsertOrMerge()
操作是合并操作,代码如下:
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);
}
}
希望对您有所帮助。