AWS SDK for .NET 现在包括适用于 Xamarin 的 AWS Mobile SDK。本指南参考了适用于 Xamarin 的 Mobile SDK 的存档版本。
使用对象持久化模型
借助适用于 .NET 和 Xamarin 的 AWS Mobile SDK 提供的对象持久化模型,您能够将客户端类映射到 DynamoDB 表。然后,每个对象实例都可以映射到对应表中的项目。为了在表中保存您的客户端对象,对象持久化模型提供了 DynamoDBContext 类,这是 DynamoDB 的入口点。这个类提供到 DynamoDB 的连接,让您能够访问表、执行各种 CRUD 操作,以及执行查询。
对象持久化模型不提供用于创建、更新或删除表的 API。它只提供数据操作。要创建、更新和删除表,您必须使用低级别 API。有关如何使用低级别 API 的说明,请参阅使用 DynamoDB 服务级别 API。
概述
对象持久化模型提供一系列特性,用于将客户端类映射到表,以及将属性/字段映射到表属性。对象持久化模型支持类属性和表属性之间的明确映射和默认映射。
-
显式映射:要将属性映射到主键,您必须使用 DynamoDBHashKey 和 DynamoDBRangeKey 对象持久化模型属性。此外,对于非主键特性,如果类中的属性名称与您希望将其映射到的对应表特性名称不同,那么您必须通过明确添加 DynamoDBProperty 特性定义这一映射。
-
默认映射 – 默认情况下,对象持久化模型会将类属性映射到表中同名的特性。
您无需映射每一个类属性,而是可以通过添加 DynamoDBIgnore 特性来标识这些属性。保存和检索对象的实例会忽略用此特性标记的任何属性。
支持的数据类型
对象持久化模型支持一系列 .NET 基元数据类型、集合数据类型和其他任意数据类型。该模型支持以下基元数据类型。
-
布尔
-
字节
-
char
-
DateTime
-
decimal、double、float
-
Int16、Int32、Int64
-
SByte
-
字符串
-
UInt16、UInt32、UInt64
对象持久化模型也支持 .NET 集合类型,但有以下限制:
-
集合类型必须实施 ICollection 接口。
-
集合类型必须由支持的基元类型组成。例如,ICollection<string>、ICollection<bool>。
-
集合类型必须提供无参数构造函数。
有关对象持久化模型的更多信息,请参阅 .NET 对象持久化模型。
创建 DynamoDB 客户端
创建 DynamoDB 客户端:
var client = new AmazonDynamoDBClient(credentials,region); DynamoDBContext context = new DynamoDBContext(client);
CRUD 操作
保存对象
创建对象:
[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 };
将对象保存到 DynamoDB 表中:
context.Save(myBook);
检索对象
检索对象:
Book retrievedBook = context.Load<Book>(1);
更新对象
更新对象:
Book retrievedBook = context.Load<Book>(1); retrievedBook.ISBN = "111-1111111001"; context.Save(retrievedBook);
删除数据元
删除对象:
Book retrievedBook = context.Load<Book>(1); context.Delete(retrievedBook);
查询和扫描
查询和检索作者为“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()); }); }
下面的扫描示例代码返回我们的表中的所有图书:
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()); }); }