

适用于 Xamarin 的 AWS 移动 SDK 现已包含在。 适用于 .NET 的 AWS SDK本指南参考了适用于 Xamarin 的 Mobile SDK 的存档版本。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 DynamoDB 存储和检索数据
<a name="getting-started-store-retrieve-data"></a>

 [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) 是一项快速、高度可扩展、高度可用且经济实惠的非关系数据库服务。DynamoDB 消除了传统上对数据存储可扩展性的限制，同时保留了低延迟性和可预测的性能。

以下教程介绍了如何将 DynamoDB 对象持久化模型 (用于将对象存储在 DynamoDB 中) 与您的应用集成。

## 项目设置
<a name="project-setup"></a>

### 先决条件
<a name="prerequisites"></a>

在开始本教程前，必须先完成有关[设置适用于 .NET 和 Xamarin 的 AWS Mobile SDK](setup.md) 的说明中的所有步骤。

### 创建 DynamoDB 表
<a name="create-a-dynamodb-table"></a>

在对 DynamoDB 数据库执行数据读写操作之前，您必须先创建一个表。创建表时，您必须指定主键。主键由哈希特性 (attribute) 和可选的范围特性组成。有关如何使用主特性和范围特性的更多信息，请参阅[处理表](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html)。

1. 转到 [DynamoDB 控制台](https://console.aws.amazon.com/dynamodb/home)，然后单击 **Create Table (创建表)**。此时将打开“Create Table”向导。

1. 按如下所示指定表名称、主键类型（哈希）和哈希特性名称 (“Id”)，然后单击 **Continue (继续)**：  
![\[DynamoDB table creation interface showing table name, primary key type, and hash attribute configuration.\]](http://docs.aws.amazon.com/zh_cn/mobile/sdkforxamarin/developerguide/images/create-table.png)

1. 将下一个屏幕中的编辑字段留空，然后单击 **Continue (继续)**。

1. 接受 **Read Capacity Units (读取容量单元)** 和 **Write Capacity Units (写入容量单元)** 的默认值，然后单击 **Continue (继续)**。

1. 在下一个屏幕上，在 **Send notification to: (发送通知到:)** 文本框中输入您的电子邮件地址，然后单击 **Continue (继续)**。此时将打开“Review”屏幕。

1. 单击**创建**。创建表可能需要几分钟。

### 设置 DynamoDB 的权限
<a name="set-permissions-for-dynamodb"></a>

为了使身份池能够访问 Amazon DynamoDB，您必须修改身份池的角色。

1. 导航到 [Identity and Access Management 控制台](https://console.aws.amazon.com/iam/home)，然后在左侧窗格中单击 **Roles (角色)**。搜索身份池名称 – 将列出两个角色，一个用于未经身份验证的用户，另一个用于经过身份验证的用户。

1. 单击用于未经过身份验证的用户（身份池名称后附加有“unauth”字样）的角色，然后单击 **Create Role Policy (创建角色策略)**。

1. 选择 **Policy Generator (策略生成器)**，然后单击 **Select (选择)**。

1. 在 **Edit Permissions (编辑权限)** 页上，按下图所示输入设置。DynamoDB 表的 Amazon 资源名称 (ARN) 类似于 `arn:aws:dynamodb:us-west-2:123456789012:table/Books`，由表所在的区域、所有者的 AWS 账号和表的名称构成，格式为 `table/Books`。有关指定的更多信息 ARNs，请参阅 [DynamoDB 的亚马逊资源名称](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/UsingIAMWithDDB.html#ARN_Format)。  
![\[Edit Permissions page for Amazon DynamoDB with Allow effect and ARN input field.\]](http://docs.aws.amazon.com/zh_cn/mobile/sdkforxamarin/developerguide/images/edit-permissions-dynamodb.png)

1. 单击 **Add Statement (添加语句)**，然后单击 **Next Step (下一步)**。向导将向您显示生成的配置。

1. 单击**应用策略**。

### 将 DynamoDB NuGet 软件包添加到您的项目中
<a name="add-nuget-package-for-dynamodb-to-your-project"></a>

按照[设置适用于.NET 和 Xamarin 的 AWS 移动软件开发工具包中说明的第 4 步，将 Dyn](setup.md) amoDB NuGet 软件包添加到您的项目中。

## 初始化 AmazonDynamo DBClient
<a name="initialize-amazondynamodbclient"></a>

将初始化的 Amazon Cognito 凭证提供程序和您的区域传递给`AmazonDynamoDB`构造函数，然后将客户端传递给 Dynamo：DBContext

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

## 创建类
<a name="create-a-class"></a>

要向表中写入行，请定义一个类以保存行数据。该类还应包含用于保存行特性 (attribute) 数据的属性 (property)，并将映射到在控制台中创建的 DynamoDB 表。以下类声明说明了这种类：

```
[DynamoDBTable("Books")]
public class Book
{
    [DynamoDBHashKey]    // Hash key.
    public int Id { get; set; }
    public string Title { get; set; }
    public string ISBN { get; set; }
    public int Price { get; set; }
    public string PageCount { get; set; }
    public string Author{ get; set; }
}
```

## 保存项目
<a name="save-an-item"></a>

要保存项目，请先创建一个对象：

```
Book songOfIceAndFire = new Book()
{
    Id=1,
    Title="Game Of Thrones",
    ISBN="978-0553593716",
    Price=4,
    PageCount="819",
    Author="GRRM"
};
```

然后保存。

```
context.Save(songOfIceAndFire);
```

要更新行，请修改 `DDTableRow` 类的实例，并按如上所示调用 `AWSDynamoObjectMapper.save()`。

## 检索项目
<a name="retrieve-an-item"></a>

使用主键检索项目：

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

## 更新项目
<a name="update-an-item"></a>

如何更新项目:

```
Book retrievedBook = context.Load<Book>(1);
retrievedBook.ISBN = "978-0553593716";
context.Save(retrievedBook);
```

## 删除项目
<a name="delete-an-item"></a>

如何删除项目:

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

有关从 Xamarin 应用程序访问 DynamoDB 的更多信息，请参阅 [Amazon DynamoDB](dynamodb.md)。