Olá pessoal,

Tempos atrás fiz um post sobre como utilizar entity group transactions com tables do Windows Azure, hoje vou comentar o assunto utilizando o novo modelo de programação para tables, um post introdutório sobre o assunto pode ser encontrado aqui.

Em linhas gerais, as principais regras para que seja possível utilizar transações são:

  • Transações de update, delete, insert, merge e replace podem ser executadas
  • É possível fazer uma operação de retrieve, mas ela precisa ser a única operação executada
  • Podem ser feitas até 100 transações em lote
  • Todas as entidades em um único lote de processamento devem estar na mesma partition key
  • Os dados não podem ultrapassar 4 MB de tamanho

Para realizar transações é necessário criar um objeto da classe TableBatchOperation e depois utilizar o método correspondente à operação sendo executada (Insert, Delete, etc), conforme exemplo abaixo:

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Table;

CloudStorageAccount account = CloudStorageAccount.DevelopmentStorageAccount;
CloudTableClient tableClient = account.CreateCloudTableClient();
CloudTable usuarios = tableClient.GetTableReference("Usuarios");
usuarios.CreateIfNotExists();

TableBatchOperation batch = new TableBatchOperation();

for (int i = 0; i < 50; i++)
{
    Usuario novoUsuario = new Usuario()
    {
        PartitionKey = DateTime.UtcNow.ToString("yyyyMMdd"),
        RowKey = Guid.NewGuid().ToString(),
        Nome = string.Format("Usuario {0}", i),
        EMail = string.Format("usuario{0}@contoso.com", i),
        Idade = i,
        AceitaReceberEMails = true
    };

    batch.Insert(novoUsuario);
}

usuarios.ExecuteBatch(batch);

Neste post adaptei os códigos utilizados nos meus dois posts anteriores sobre table e o código atualizado pode ser encontrado aqui.