Azure表存储中的事务

问题描述 投票:4回答:1

假设我有:

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,这仍然正确吗?

azure azure-table-storage
1个回答
9
投票

假设所有需要对其执行操作的实体都具有相同的PartitionKey,则可以利用Windows Azure表存储中可用的Entity Group Transaction功能。它确实做到了。如果对事务中的实体执行的操作失败,则会回滚整个事务。

但是您似乎要删除一个实体,然后再次创建相同的实体。该方案不适用于实体批处理事务,因为实体只能在事务中出现一次,并且只能对实体执行一项操作。您似乎对替换实体感兴趣。在这种情况下,您可以直接使用Entity Group Transaction功能。

© www.soinside.com 2019 - 2024. All rights reserved.