Azure Data Tables中UpdateMerge与UpsertMerge行为是否一致?
Azure.Data.Tables中UpdateMerge行为与文档不符的问题
我正在将代码库从已废弃的Microsoft.Azure.Cosmos.Table迁移至Azure.Data.Tables,多数API都能找到对应实现,但原TableBatchOperation.Merge操作的替代方案出现问题。
根据新API文档,原Merge操作的等效实现是使用TableTransactionActionType.UpdateMerge,通过构建TableTransactionAction集合并调用SubmitTransactionAsync执行批量操作,示例代码如下:
List<TableTransactionAction> myBatch = new List<TableTransactionAction>(); myBatch.AddRange(someListOfEntities.Select(e => new TableTransactionAction(TableTransactionActionType.UpdateMerge, e))); return myTableClient.SubmitTransactionAsync(myBatch);
但实际测试发现,文档明确说明UpdateMerge仅更新已存在的实体,可它的实际行为却和UpsertMerge一致——当实体不存在时会自动创建该实体。这和原Cosmos SDK Table API中Merge操作的行为完全相悖:原Merge在实体不存在时会直接抛出错误。
相关文档描述
- 原Cosmos SDK的Merge操作:目标实体不存在时抛出错误
- Azure Data Tables文档标注:UpdateMerge等效于
TableClient.UpdateEntity的Merge模式,仅对已存在的实体执行更新
其他开发者的反馈
不少开发者都遇到过这个问题,这是Azure.Data.Tables SDK目前存在的已知行为偏差。如果需要贴合原Merge操作的行为,可以采用以下临时方案:
- 执行批量UpdateMerge前,先批量查询实体是否存在,仅对确认存在的实体执行UpdateMerge操作
- 放弃批量事务,单独调用
UpdateEntityAsync方法(指定Merge模式),该方法会在实体不存在时抛出RequestFailedException(状态码404),符合原Merge的行为,再自行实现批量逻辑(注意单事务最多支持100个操作的限制)
内容的提问来源于stack exchange,提问作者spb
相关产品推荐
相关产品推荐

