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 querypartition 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);
                }
            }

希望对您有所帮助。