

 AWS Mobile SDK for Xamarin が に含まれるようになりました AWS SDK for .NET。このガイドでは、Mobile SDK for Xamarin のアーカイブバージョンについて説明します。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# オブジェクト永続性モデルの使用
<a name="dynamodb-integration-objectpersistencemodel"></a>

AWS Mobile SDK for .NET and Xamarin には、クライアント側クラスを DynamoDB テーブルにマッピングできる、オブジェクト永続性モデルが用意されています。各オブジェクトインスタンスが、対応するテーブルの項目にマッピングされます。クライアント側オブジェクトをテーブルに保存するために、オブジェクト永続性モデルでは、DynamoDB のエントリポイントとなる DynamoDBContext クラスを使用できます。このクラスでは、DynamoDB に接続してテーブルにアクセスし、各種の CRUD オペレーションやクエリを実行することができます。

オブジェクト永続性モデルには、テーブルを作成、更新、または削除するための API はありません。データオペレーションだけが可能になっています。テーブルを作成、更新、および削除するには、低レベル API を使用する必要があります。低レベル API の使用方法については、「[DynamoDB サービスレベル API を使用する](dynamodb-integration-lowlevelapi.md)」を参照してください。

## 概要:
<a name="overview"></a>

オブジェクト永続性モデルには、クライアント側クラスをテーブルにマッピングし、プロパティ/フィールドを属性にマッピングする、属性のセットが用意されています。オブジェクト永続性モデルでは、クラスプロパティとテーブル属性との間で、明示的なマッピングとデフォルトのマッピングの両方がサポートされています。
+  **明示的なマッピング**: プライマリキーにプロパティをマッピングするには、オブジェクト永続性モデル属性の DynamoDBHashKey および DynamoDBRangeKey を使用する必要があります。さらに、非プライマリキー属性については、クラス内のプロパティ名と、マッピング先の対応するテーブル属性が同じでない場合は、DynamoDBProperty 属性を明示的に追加してマッピングを定義する必要があります。
+  **デフォルトのマッピング** - デフォルトでは、オブジェクト永続性モデルによって、クラスプロパティがテーブル内の同じ名前の属性にマッピングされます。

すべてのクラスプロパティをマッピングする必要はありません。これらのプロパティを特定するには、DynamoDBIgnore 属性を追加します。オブジェクトのインスタンスを保存して取得すると、この属性でマークされたプロパティはすべて省略されます。

## サポートされるデータ型
<a name="supported-data-types"></a>

オブジェクト永続性モデルでは、プリミティブな .NET データ型、コレクション、および任意のデータ型のセットがサポートされています。このモデルでは、次のプリミティブデータ型がサポートされています。
+ ブール
+ バイト
+ char
+ DateTime
+ 小数点、倍精度浮動小数点型、浮動小数点型
+ Int16、Int32、Int64
+ SByte
+ string
+ UInt16、UInt32、UInt64

オブジェクト永続性モデルでは、次の制限の下で .NET コレクション型もサポートされています。
+ コレクション型は、ICollection インターフェイスを実装する必要があります。
+ コレクション型は、サポートされているプリミティブ型で構成されている必要があります。たとえば、ICollection<string>、ICollection<bool> を参照してください。
+ コレクション型では、パラメータがないコンストラクタを使用できなければなりません。

オブジェクト永続性モデルの詳細については、「[.NET オブジェクト永続性モデル](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DotNetSDKHighLevel.html)」を参照してください。

## DynamoDB クライアントの作成
<a name="create-a-dynamodb-client"></a>

DynamoDB クライアントを作成するには、以下を行います。

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

## CRUD オペレーション
<a name="crud-operations"></a>

### オブジェクトの保存
<a name="save-an-object"></a>

オブジェクトを作成します。

```
[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);
```

### オブジェクトの取得
<a name="retrieve-an-object"></a>

オブジェクトを取得するには:

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

### オブジェクトを更新
<a name="update-an-object"></a>

オブジェクトを更新するには:

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

### オブジェクトの削除
<a name="delete-an-object"></a>

オブジェクトを削除するには:

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

## クエリおよびスキャン
<a name="query-and-scan"></a>

作成者が「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());
  });
}
```