You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 14:18:28