1

我最近在使用 Microsoft.Azure.Cosmos.Table API,我注意到有一个很棒的方法称为InsertOrMergeOperation,但是,我想知道返回结果是否可以告诉我我的实体是否只是插入或合并/更新操作。我检查了 TableResult 对象,但它没有返回任何有用的信息。

有谁知道这次行动能否给我想要的东西?如果没有,是否有任何其他操作可以执行相同的工作流程?

4

1 回答 1

3

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

希望能帮助到你。

于 2019-08-06T02:34:24.977 回答