假设我有:
using (TransactionScope scope = new TransactionScope())
{
if (IndexExists(index.RowKey))
DeleteIndex(index.RowKey); //deletes using TableOperation.Delete
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionString);
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
CloudTable table = tableClient.GetTableReference(Const.IndexTable);
TableOperation insertOperation = TableOperation.Insert(index);
table.Execute(insertOperation);
}
我想要的是:如果插入失败,则应撤消删除。这是进行交易的正确方法吗?一切都发生在同一分区/表中。还有交易的其他限制是什么,我在某处读到,交易中最多可以存储4 Mb,这仍然正确吗?
假设所有需要对其执行操作的实体都具有相同的PartitionKey,则可以利用Windows Azure表存储中可用的Entity Group Transaction
功能。它确实做到了。如果对事务中的实体执行的操作失败,则会回滚整个事务。
但是您似乎要删除一个实体,然后再次创建相同的实体。该方案不适用于实体批处理事务,因为实体只能在事务中出现一次,并且只能对实体执行一项操作。您似乎对替换实体感兴趣。在这种情况下,您可以直接使用Entity Group Transaction
功能。