Utilizando Entity Group Transactions com Tables do Windows Azure

Olá pessoal,

No meu último post, falei um pouco sobre como utilizar tables do Windows Azure. Hoje vou falar um pouco sobre como podemos utilizar transações com essas tabelas, técnica conhecida como Entity Group Transaction. Para isso, entretanto, é necessário que algumas regras possam ser respeitadas:

  • Todas as entidades participantes da transação devem ter o mesmo valor de PartitionKey
  • Uma entidade pode ser utilizada somente uma vez na transação, e somente uma operação pode ser feita com ela
  • Uma transação pode incluir até 100 entidades, e seu total de dados não pode ultrapassar 4 MB de tamanho
  • As entidades estão sujeitas às regras do artigo Understanding the Table Service Data Model.

Para realizar transações, é necessário realizar operações de insert, update ou delete no seu objeto de contexto, e depois salvar as alterações através do método SaveChanges com a opção SaveChangesOptions.Batch. Segue o exemplo:

Usuario[] novosUsuarios = new Usuario[50];

for (int i = 0; i < novosUsuarios.Length; i++)
{
novosUsuarios[i] = 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
};
}

context.AddUsuarios(novosUsuarios);

E depois o método AddUsuarios do meu contexto, que realiza as inserções e depois salva as alterações:

internal void AddUsuarios(Usuario[] novosUsuarios)
{
foreach (var item in novosUsuarios)
{
this.AddObject(TabelaUsuarios, item);
}

    this.SaveChanges(SaveChangesOptions.Batch);
}

Neste exemplo, adaptei o código do post anterior e o código atualizado pode ser encontrado aqui.

RG