거래

2013-03-09 6 views
3

내가 가진 가정 :거래

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); 
} 

내가 원하는 것은 이것이다 : 삽입이 실패 할 경우, 취소해야 삭제할 수 있습니다. 이것은 거래를하는 올바른 방법입니까? 모든 것은 같은 파티션/테이블에서 발생합니다. 또한 트랜잭션의 다른 제한 사항은 무엇입니까, 나는 어딘가에 4Mb가 트랜잭션 내에 저장 될 수 없다는 것을 읽었습니다. 여전히 정확합니까?

답변

7

작업을 수행해야하는 모든 엔터티가 동일한 PartitionKey를 가지고 있다고 가정하면 Windows Azure 테이블 저장소에서 Entity Group Transaction 기능을 사용할 수 있습니다. 그것은 정확하게 그것을합니다. 트랜잭션의 엔터티 작업이 실패하면 전체 트랜잭션이 롤백됩니다. 그러나 엔티티를 삭제하고 동일한 엔티티를 다시 만드는 것으로 보입니다. 엔티티는 트랜잭션에서 한 번만 나타날 수 있고 한 엔티티에서는 하나의 작업 만 수행 할 수 있으므로이 시나리오는 엔티티 일괄 트랜잭션에서 작동하지 않습니다. 엔티티를 바꾸는 것이 관심있는 것 같습니다. 이 경우 직접 InsertOrReplace() 기능을 사용할 수 있습니다.