我正在尝试将一组简单的插入操作发送到 Azure 表存储,但似乎整个批处理事务已失效,并且使用托管的 azure 存储客户端,如果在批次到预先存在的记录。(使用 2.0 客户端):
public class SampleEntity : TableEntity
{
public SampleEntity(string partKey, string rowKey)
{
this.PartitionKey = partKey;
this.RowKey = rowKey;
}
}
var acct = CloudStorageAccount.DevelopmentStorageAccount;
var client = acct.CreateCloudTableClient();
var table = client.GetTableReference("SampleEntities");
var foo = new SampleEntity("partition1", "preexistingKey");
var bar = new SampleEntity("partition1", "newKey");
var batchOp = new TableBatchOperation();
batchOp.Add(TableOperation.Insert(foo));
batchOp.Add(TableOperation.Insert(bar));
var result = table.ExecuteBatch(batchOp); // throws exception: "0:The specified entity already exists."
使用 InsertOrMerge 可以避免批处理级异常,但随后每个单独的操作响应都会返回 204,无论该特定操作是否插入或合并它。因此,客户端应用程序似乎不可能保留它或集群中的另一个节点是否插入了记录的知识。不幸的是,在我目前的情况下,这些知识对于某些下游同步是必要的。
是否有一些配置或技术允许批量插入继续并返回每个项目的特定响应代码而不会引发一揽子异常?