鉴于前者已弃用,我正在从 Microsoft.Azure.Cosmos.Table => Azure.Data.Tables 转换代码库,并且在大多数情况下,我发现有代表性的方法在新的 api 中,我在上一个版本中使用了所有内容,但有一个例外:TableBatchOperation 类上的合并操作。
根据新 api 的文档,等效的应该是
TableTransactionType.UpdateMerge
,如果您想以类似于原始 TableBatchOperation.Merge
的方式进行批处理,您只需创建一个集合 TableTransactionAction
并指定 TableTransactionType.UpdateMerge
作为操作类型,该集合与您的实体一起传递给 yourClientTable.SubmitTransactionAsync
例如
List<TableTransactionAction> myBatch = new List<TableTransactionAction>();
myBatch.AddRange(someListOfEntities.Select(e => new TableTransactionAction(TableTransactionActionType.UpdateMerge, e)));
return myTableClient.SubmitTransactionAsync(myBatch);
我注意到的是,虽然文档表明这应该仅对现有实体执行更新,但它的行为更像是指示的
UpsertMerge
,因为如果实体不存在,它将创建它。
这与 Cosmos SDK 表 api 的行为相反,在 Cosmos SDK 表 api 中尝试使用不存在的实体进行
Merge
会引发错误。还有其他人有过 Azure Data Tables api UpdateMerge
和 UpsertMerge
表现相同的经历吗(尽管有迹象表明它们不应该)?
来自 Azure 数据表文档:
用于合并的cosmos文档
看来你需要在创建TableEntity实例时添加
{ ETag = Azure.ETag.All }
。
例如:
TableEntity tableEntity = new TableEntity("partitionKey", "rowKey") { ETag = Azure.ETag.All };
您可以在这里查看说明。