

適用於 Xamarin 的 AWS Mobile SDK 現在已包含在 中 適用於 .NET 的 AWS SDK。本指南參考 Mobile SDK for Xamarin 的封存版本。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 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 資料庫。建立資料表時，您必須指定主索引鍵。主索引鍵由雜湊屬性和選用的範圍屬性組成。如需如何使用主要屬性和範圍屬性的詳細資訊，請參閱[使用資料表](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html)。

1. 前往 [DynamoDB 主控台](https://console.aws.amazon.com/dynamodb/home)，然後按一下**建立資料表**。建立資料表精靈隨即出現。

1. 指定您的資料表名稱、主索引鍵類型 (Hash) 和雜湊屬性名稱 (「Id」)，如下所示，然後按一下**繼續**：  
![\[DynamoDB table creation interface showing table name, primary key type, and hash attribute configuration.\]](http://docs.aws.amazon.com/zh_tw/mobile/sdkforxamarin/developerguide/images/create-table.png)

1. 將下一個畫面中的編輯欄位保留空白，然後按一下**繼續**。

1. 接受**讀取容量單位**和**寫入容量單位**的預設值，然後按一下**繼續**。

1. 在下一個畫面中，在**傳送通知至：**文字方塊中輸入您的電子郵件地址，然後按一下**繼續**。檢閱畫面隨即出現。

1. 按一下 **Create (建立)**。建立資料表可能需要幾分鐘的時間。

### 設定 DynamoDB 的許可
<a name="set-permissions-for-dynamodb"></a>

若要讓身分集區存取 Amazon DynamoDB，您必須修改身分集區的角色。

1. 導覽至 [Identity and Access Management Console](https://console.aws.amazon.com/iam/home)，然後按一下左側窗格中**的角色**。搜尋您的身分集區名稱 - 將列出兩個角色，一個用於未驗證的使用者，另一個用於已驗證的使用者。

1. 按一下未驗證使用者的角色 （身分集區名稱將附加「不驗證」)，然後按一下**建立角色政策**。

1. 選取**政策產生器**，然後按一下**選取**。

1. 在**編輯許可**頁面上，輸入下圖中顯示的設定。DynamoDB 資料表的 Amazon Resource Name (ARN) 看起來類似`arn:aws:dynamodb:us-west-2:123456789012:table/Books`，由資料表所在的區域、擁有者的 AWS 帳戶號碼，以及格式為 的資料表名稱組成`table/Books`。如需指定 ARNs 的詳細資訊，請參閱 [ DynamoDB 的 Amazon Resource Names](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_tw/mobile/sdkforxamarin/developerguide/images/edit-permissions-dynamodb.png)

1. 按一下**新增陳述式**，然後按一下**下一步**。精靈會顯示產生的組態。

1. 按一下**套用政策**。

### 將 DynamoDB 的 NuGet 套件新增至您的專案
<a name="add-nuget-package-for-dynamodb-to-your-project"></a>

請遵循[設定適用於 .NET 和 Xamarin 的 AWS Mobile SDK](setup.md) 中的步驟 4，將 DynamoDB NuGet 套件新增至您的專案。

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

將初始化的 Amazon Cognito `AmazonDynamoDB` 登入資料提供者和您的區域傳遞至建構函式，然後將用戶端傳遞至 DynamoDBContext：

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

## 建立類別
<a name="create-a-class"></a>

若要將資料列寫入資料表，請定義類別以保留資料列資料。類別也應該包含屬性，這些屬性會保留資料列的屬性資料，並將對應至在主控台中建立的 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)。