Uso do modelo de persistência de objetos - AWS Mobile SDK

O AWS Mobile SDK for Xamarin agora está incluído no AWS SDK for .NET. Este guia faz referência à versão arquivada do Mobile SDK para Xamarin.

Uso do modelo de persistência de objetos

O AWS Mobile SDK para .NET e Xamarin fornece um modelo de persistência de objetos que permite mapear classes do cliente para uma tabela do DynamoDB. Cada instância do objeto, então, mapeia para um item na tabela correspondente. Para salvar os objetos do cliente em uma tabela, o modelo de persistência de objetos fornece à classe do DynamoDBContext um ponto de entrada para o DynamoDB. Esta classe fornece uma conexão ao DynamoDB e permite que você acesse tabelas, execute várias operações CRUD e realize consultas.

O modelo de persistência de objetos não fornece uma API para criar, atualizar ou excluir tabelas. Ele fornece apenas operações de dados. Para criar, atualizar e excluir tabelas, você deve usar a API de nível inferior. Para obter instruções sobre como usar a API de nível inferior, consulte Uso das APIs de nível de serviço do DynamoDB.

Visão geral

O modelo de persistência de objetos fornece um conjunto de atributos para mapear classes do cliente às tabelas e propriedades/campos de atributos das tabelas. O modelo de persistência de objetos é compatível com o mapeamento explícito e o padrão entre as propriedades das classes e os atributos da tabela.

  • Mapeamento explícito: para mapear uma propriedade até uma chave primária, você deve usar os atributos dos modelos de persistência de objetos DynamoDBHashKey e DynamoDBRangeKey. Além disso, referente aos atributos de chave não primária, se um nome de uma propriedade em sua classe e no atributo da tabela correspondente ao qual você deseja mapear não forem os mesmos, nesse caso, você deve definir o mapeamento, adicionando de forma explícita o atributo DynamoDBProperty.

  • Mapeamento padrão – Por padrão, o modelo de persistência de objetos mapeia as propriedades de classe para os atributos com o mesmo nome na tabela.

Você não precisa mapear todas as propriedades de classe. Você identifica essas propriedades ao adicionar o atributo DynamoDBIgnore. Salvar e recuperar uma instância de um objeto pode omitir qualquer propriedade marcada com este atributo.

Tipos de dados compatíveis

O modelo de persistência de objeto é compatível com um conjunto de tipos de dados primitivos do .NET, com a coleta dos mesmos e com os tipos de dados arbitrários. O modelo é compatível com os seguintes tipos de dados primitivos.

  • bool

  • byte

  • char

  • DateTime

  • decimal, duplo, float

  • Int16, Int32, Int64

  • SByte

  • string

  • UInt16, UInt32, UInt64

O modelo de persistência de objetos .NET também é compatível com os tipos de coleta que contêm as seguintes limitações:

  • O tipo de coleta deve implementar a interface ICollection.

  • O tipo de Coleta deve ser composto por tipos primitivos compatíveis. Por exemplo, ICollection<string>, ICollection<bool>.

  • O tipo de coleta deve fornecer um construtor sem parâmetro.

Para obter mais informações sobre o modelo de persistência de objetos, consulte o Modelo de persistência de objetos do .NET.

Criação de um cliente DynamoDB

Para criar um cliente DynamoDB:

var client = new AmazonDynamoDBClient(credentials,region); DynamoDBContext context = new DynamoDBContext(client);

Operações de CRUD

Salvar um objeto

Criar um objeto:

[DynamoDBTable("Books")] public class Book { [DynamoDBHashKey] // Hash key. public string Id { get; set; } [DynamoDBGlobalSecondaryIndexHashKey] public string Author { get; set; } [DynamoDBGlobalSecondaryIndexRangeKey] public string Title { get; set; } public string ISBN { get; set; } public int Price { get; set; } public string PageCount { get; set; } } Book myBook = new Book { Id = id, Author = "Charles Dickens", Title = "Oliver Twist", ISBN = "111-1111111001", Price = 10, PageCount = 300 };

Salve um objeto em uma tabela do DynamoDB:

context.Save(myBook);

Recuperar um objeto

Para recuperar um objeto:

Book retrievedBook = context.Load<Book>(1);

Atualizar um objeto

Para atualizar um objeto:

Book retrievedBook = context.Load<Book>(1); retrievedBook.ISBN = "111-1111111001"; context.Save(retrievedBook);

Excluir um objeto

Para excluir um objeto:

Book retrievedBook = context.Load<Book>(1); context.Delete(retrievedBook);

Consulta e verificação

Para consultar e recuperar todos os livros cujo autor seja "Charles Dickens":

public async Task QueryAsync(AWSCredentials credentials, RegionEndpoint region) { var client = new AmazonDynamoDBClient(credentials, region); DynamoDBContext context = new DynamoDBContext(client); var search = context.FromQueryAsync < Book > (new Amazon.DynamoDBv2.DocumentModel.QueryOperationConfig() { IndexName = "Author-Title-index", Filter = new Amazon.DynamoDBv2.DocumentModel.QueryFilter("Author", Amazon.DynamoDBv2.DocumentModel.QueryOperator.Equal, "Charles Dickens") }); Console.WriteLine("items retrieved"); var searchResponse = await search.GetRemainingAsync(); searchResponse.ForEach((s) = > { Console.WriteLine(s.ToString()); }); }

O código de exemplo de verificação abaixo retorna todos os livros de nossa tabela:

public async Task ScanAsync(AWSCredentials credentials, RegionEndpoint region) { var client = new AmazonDynamoDBClient(credentials, region); DynamoDBContext context = new DynamoDBContext(client); var search = context.FromScanAsync < Book > (new Amazon.DynamoDBv2.DocumentModel.ScanOperationConfig() { ConsistentRead = true }); Console.WriteLine("items retrieved"); var searchResponse = await search.GetRemainingAsync(); searchResponse.ForEach((s) = > { Console.WriteLine(s.ToString()); }); }