

 AWS Mobile SDK untuk Xamarin sekarang termasuk dalam. AWS SDK untuk .NET Panduan ini menjadi referensi versi yang diarsipkan dari Mobile SDK for Xamarin.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Amazon DynamoDB
<a name="dynamodb"></a>

## Apa itu Amazon DynamoDB?
<a name="what-is-amazon-dynamodb"></a>

 [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) adalah layanan basis data yang cepat, sangat dapat diskalakan dan bukan relasional. DynamoDB menghilangkan keterbatasan skalabilitas tradisional pada penyimpanan data sekaligus mempertahankan performa latensi rendah dan dapat diprediksi.

## Konsep kunci
<a name="key-concepts"></a>

Konsep model data DynamoDB termasuk tabel, item, dan atribut.

### Tabel
<a name="tables"></a>

Di Amazon DynamoDB, basis data adalah kumpulan tabel. Sebuah tabel adalah kumpulan item, dan setiap item adalah kumpulan atribut.

Dalam basis data relasional, tabel memiliki skema yang telah ditetapkan seperti nama tabel, kunci utama, daftar nama kolom dan jenis data mereka. Semua catatan yang disimpan dalam tabel harus memiliki set kolom yang sama. Sebaliknya, DynamoDB hanya mengharuskan tabel memiliki kunci utama, tetapi tidak mengharuskan Anda untuk menentukan semua nama atribut dan jenis data di muka.

Untuk mem-pelajari selengkapnya tentang cara menggunakan tabel, lihat [Cara Menggunakan Tabel di DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html).

### Item dan Atribut
<a name="items-and-attributes"></a>

Sebuah item dalam tabel DynamoDB dapat memiliki sejumlah atribut, meskipun ukuran item terbatas pada 400 KB. Ukuran item adalah jumlah dari panjang nama dan nilai atributnya (panjang biner dan UTF-8).

Setiap atribut dalam sebuah item adalah pasangan nama-nilai. Atribut dapat berupa set nilai-tunggal atau multi-nilai. Misalnya, item buku dapat memiliki atribut judul dan penulis. Setiap buku memiliki satu judul tetapi dapat memiliki banyak penulis. Atribut multinilai adalah satu set; nilai-nilai duplikat tidak diperbolehkan.

Misalnya, anggap Anda akan menyimpan katalog produk di DynamoDB. Anda dapat membuat tabel, ProductCatalog, dengan atribut Id sebagai kunci utama. Kunci utama tersebut secara unik mengidentifikasi setiap item, sehingga tidak ada dua produk yang ada dalam tabel yang dapat memiliki ID yang sama.

Untuk mem-pelajari selengkapnya tentang cara menggunakan item, lihat [Cara Menggunakan Item di DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithItems.html).

### Tipe Data
<a name="data-types"></a>

Amazon DynamoDB men-support tipe data berikut:
+  **Tipe skalar** – Angka, String, Biner, Boolean, dan Null.
+  **Tipe multi-nilai** – Set String, Set Angka, dan Set Biner.
+  **Tipe dokumen** – Daftar dan Peta.

Untuk informasi lebih lanjut tentang Jenis Data skalar, Jenis Data Multi-Nilai, dan Jenis Data Dokumen, lihat [Jenis data DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html#DataModel.DataTypes).

### Kunci Utama
<a name="primary-key"></a>

Ketika Anda membuat tabel, selain nama tabel, Anda harus menentukan kunci primer dari tabel. Kunci utama secara unik mengidentifikasi setiap item dalam tabel, sehingga tidak ada dua item dapat memiliki kunci yang sama. DynamoDB men-support dua jenis kunci utama berikut ini:
+  **Kunci Hash**: Kunci utama terbuat dari satu atribut, atribut hash. DynamoDB membangun indeks hash tak berurutan pada atribut kunci primer ini. Setiap item dalam tabel diidentifikasi secara unik berdasarkan nilai kunci hash-nya.
+  **Kunci Hash dan Rentang**: Kunci primer terbuat dari dua atribut. Atribut pertama adalah atribut hash dan yang kedua adalah atribut rentang. DynamoDB membangun indeks hash tak berurutan pada atribut kunci primer hash, dan indeks rentang diurutkan pada atribut kunci primer rentang. Setiap item dalam tabel diidentifikasi secara unik berdasarkan kombinasi nilai kunci hash dan rentang-nya. Hal ini dimungkinkan untuk dua item memiliki nilai kunci hash yang sama, tetapi kedua item tersebut harus memiliki nilai kunci rentang yang berbeda.

### Indeks Sekunder
<a name="secondary-indexes"></a>

Bila Anda membuat tabel dengan kunci hash dan rentang, Anda secara opsional dapat menentukan satu atau lebih indeks sekunder pada tabel itu. Indeks sekunder memungkinkan Anda melakukan kueri data dalam tabel menggunakan kunci alternatif, selain kueri terhadap kunci primer.

DynamoDB men-support dua jenis indeks sekunder: indeks sekunder lokal dan indeks sekunder global.
+  **Indeks sekunder lokal**: Indeks yang memiliki kunci hash yang sama seperti tabel, tetapi kunci rentang yang berbeda.
+  **Indeks sekunder global**: Indeks yang meiliki kunci hash dan kunci rentang yang dapat berbeda dari yang ada pada tabel.

Anda dapat menentukan hingga 5 indeks sekunder global dan 5 indeks sekunder lokal untuk setiap tabel. Untuk informasi selengkapnya, lihat [Meningkatkan Akses Data dengan Indeks Sekunder dalam DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SecondaryIndexes.html) dalam Panduan Developer DynamoDB.

### Melakukan Kueri dan Pemindaian
<a name="query-and-scan"></a>

Selain menggunakan kunci utama untuk mengakses item, Amazon DynamoDB juga menyediakan APIs dua untuk mencari data: Query dan Scan. Sebaiknya Anda membaca [Panduan Kueri dan Pemindaian](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScanGuidelines.html) dalam Panduan Developer DynamoDB untuk membuat Anda terbiasa dengan beberapa praktik terbaik.

#### Kueri
<a name="query"></a>

Operasi Kueri mencari item dalam tabel atau indeks sekunder hanya menggunakan nilai atribut kunci primer. Anda harus memberikan nama atribut kunci hash dan nilai yang berbeda untuk mencari. Secara opsional, Anda dapat memberikan nama dan nilai atribut kunci rentang, dan menggunakan operator perbandingan untuk memperbaiki hasil pencarian.

Untuk kueri sampel, lihat:
+  [Menggunakan Model Dokumen](dynamodb-integration-docmodel.md) 
+  [Menggunakan Model Persistensi Objek](dynamodb-integration-objectpersistencemodel.md) 
+  [Menggunakan Level Layanan DynamoDB APIs](dynamodb-integration-lowlevelapi.md) 

Untuk informasi tentang Kueri, lihat [Kueri](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#QueryAndScan.Query) di Panduan Developer DynamoDB.

#### Scan
<a name="scan"></a>

Operasi Pemindaian membaca setiap item dalam tabel atau indeks sekunder. Secara default, operasi Pemindaian mengembalikan semua atribut data untuk setiap item dalam tabel atau indeks. Anda dapat menggunakan ProjectionExpression parameter sehingga Scan hanya mengembalikan beberapa atribut, bukan semuanya.

Untuk pemindaian sampel, lihat:
+  [Menggunakan Model Dokumen](dynamodb-integration-docmodel.md) 
+  [Menggunakan Model Persistensi Objek](dynamodb-integration-objectpersistencemodel.md) 
+  [Menggunakan Level Layanan DynamoDB APIs](dynamodb-integration-lowlevelapi.md) 

Untuk informasi tentang Pemindaian, lihat [Pemindaian](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#QueryAndScan.Scan) di Panduan Developer DynamoDB.

## Penyiapan Proyek
<a name="project-setup"></a>

### Prasyarat
<a name="prerequisites"></a>

Untuk menggunakan DynamoDB dalam aplikasi Anda, Anda harus menambahkan SDK ke dalam proyek Anda. Untuk melakukannya, ikuti petunjuk di [Menyiapkan AWS Mobile SDK for .NET and Xamarin](setup.md).

### Membuat Tabel DynamoDB
<a name="create-a-dynamodb-table"></a>

Untuk membuat tabel, buka [Konsol DynamoDB](https://console.aws.amazon.com/dynamodb/home) dan ikuti langkah-langkah ini:

1. Klik **Buat Tabel**.

1. Masukkan nama tabel.

1. Pilih **Hash** sebagai tipe kunci primer.

1. Pilih satu jenis dan masukkan nilai untuk nama atribut hash. Klik **Lanjutkan**.

1. Pada halaman **Tambahkan Indeks**, jika Anda berencana untuk menggunakan indeks sekunder global, atur **Jenis Indeks** ke “Indeks Sekunder Global” dan di bawah **Kunci Hash Indeks**, masukkan nilai untuk indeks sekunder. Hal ini akan memungkinkan Anda untuk melakukan kueri dan pemindaian menggunakan indeks primer maupun indeks sekunder. Klik **Tambahkan Indeks ke Tabel**, dan kemudian klik **Lanjutkan**. Untuk melewatkan penggunaan indeks sekunder global, klik **Lanjutkan**.

1. Atur kapasitas baca dan tulis ke tingkat yang Anda inginkan. Untuk informasi lebih lanjut tentang konfigurasi kapasitas, lihat [Throughput yang Disediakan di Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughputIntro.html). Klik **Lanjutkan**.

1. Pada layar berikutnya, masukkan email notifikasi untuk membuat alarm throughput, jika diinginkan. Klik **Lanjutkan**.

1. Di halaman ringkasan, klik **Buat**. DynamoDB akan membuat basis data Anda.

### Mengatur Izin untuk DynamoDB
<a name="set-permissions-for-dynamodb"></a>

Untuk menggunakan DynamoDB dalam aplikasi, Anda harus mengatur izin yang benar. Kebijakan IAM berikut memungkinkan pengguna untuk menghapus, mendapatkan, menempatkan, melakukan kueri, memindai, dan memperbarui item dalam tabel DynamoDB tertentu, yang diidentifikasi oleh [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html):

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:DeleteItem",
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:Query",
        "dynamodb:Scan",
        "dynamodb:UpdateItem"
      ],
      "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/MyTable"
    }
  ]
}
```

Anda dapat mengubah kebijakan di [Konsol IAM](https://console.aws.amazon.com/iam/). Anda harus menambahkan atau menghapus tindakan yang diizinkan berdasarkan kebutuhan aplikasi Anda.

Untuk mem-pelajari selengkapnya tentang kebijakan IAM, lihat [Menggunakan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_Introduction.html).

Untuk mem-pelajari selengkapnya tentang kebijakan khusus DynamoDB, lihat [Menggunakan IAM untuk Mengendalikan Akses ke Sumber Daya DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/UsingIAMWithDDB.html) dalam Panduan Developer DynamoDB.

## Mengintegrasikan DynamoDB dengan Aplikasi Anda
<a name="integrating-dynamodb-with-your-application"></a>

AWS Mobile SDK for .NET and Xamarin menyediakan perpustakaan tingkat tinggi untuk digunakan dengan DynamoDB. Anda juga dapat membuat permintaan langsung terhadap API DynamoDB tingkat rendah, tetapi untuk sebagian besar kasus penggunaan, perpustakaan tingkat tinggi lebih direkomendasikan. AmazonDynamoDBClient Ini adalah bagian yang sangat berguna dari perpustakaan tingkat tinggi. Dengan menggunakan kelas ini, Anda dapat melakukan berbagai operasi buat, baca, perbarui, dan hapus (CRUD) dan menjalankan kueri.

AWS Mobile SDK untuk.NET dan Xamarin memungkinkan Anda APIs melakukan panggilan menggunakan AWS SDK for .NET untuk bekerja dengan DynamoDB. Semua APIs tersedia di AWSSDK .dll. Untuk informasi tentang mengunduh AWS SDK for .NET, lihat [AWS SDK for .NET](https://aws.amazon.com/sdk-for-net/).

Ada tiga cara yang dapat Anda gunakan untuk berinteraksi dengan DynamoDB dalam aplikasi Xamarin Anda:
+  **Model Dokumen**: API ini menyediakan kelas pembungkus pada API tingkat rendah DynamoDB untuk lebih menyederhanakan tugas-tugas pemrograman Anda. Tabel dan Dokumen adalah kelas pembungkus kunci. Anda dapat menggunakan model dokumen untuk operasi data seperti membuat, mengambil, memperbarui dan menghapus item. API tersedia di Amazon.DynamoDB. DocumentModel namespace.
+  **Model Persistensi Objek**: API Persistensi Objek memungkinkan Anda memetakan kelas sisi klien ke tabel DynamoDB. Kemudian, setiap instans objek memetakan ke item dalam tabel yang sesuai. DBContext Kelas Dynamo dalam API ini menyediakan metode bagi Anda untuk menyimpan objek sisi klien ke tabel, mengambil item sebagai objek dan melakukan kueri dan pemindaian. Anda dapat menggunakan model Persitensi Objek untuk operasi data seperti membuat, mengambil, memperbarui dan menghapus item. Anda harus terlebih dahulu membuat tabel Anda menggunakan API Klien Layanan dan kemudian menggunakan model persistensi objek untuk memetakan kelas Anda ke tabel. API tersedia di Amazon.DynamoDB. DataModel namespace.
+  **API Klien Layanan**: Ini adalah API tingkat protokol yang memetakan DynamoDB API dengan erat. Anda dapat menggunakan API tingkat rendah ini untuk semua operasi tabel dan item seperti membuat, memperbarui, atau menghapus tabel dan item. Anda juga dapat melakukan kueri dan memindai tabel Anda. API ini tersedia di namespace Amazon.DynamoDB.

Ketiga model ini diuraikan secara mendalam dalam topik berikut:

**Topics**

# Menggunakan Model Dokumen
<a name="dynamodb-integration-docmodel"></a>

Model Dokumen menyediakan kelas pembungkus pada .NET API tingkat rendah. Tabel dan Dokumen adalah kelas pembungkus kunci. Anda dapat menggunakan Model Dokumen untuk membuat, mengambil, memperbarui dan menghapus item. Untuk membuat, memperbarui, dan menghapus tabel, Anda harus menggunakan API tingkat rendah. Untuk petunjuk tentang cara menggunakan API tingkat rendah, lihat [Menggunakan Level Layanan DynamoDB](dynamodb-integration-lowlevelapi.md). APIs API tingkat rendah tersedia di Amazon.DynamoDB. DocumentModel namespace.

Untuk mem-pelajari selengkapnya tentang Model Dokumen, lihat [Model Dokumen .NET](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DotNetSDKMidLevel.html).

## Membuat Klien DynamoDB
<a name="create-a-dynamodb-client"></a>

Untuk membuat klien DynamoDB:

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

## Operasi CRUD
<a name="crud-operations"></a>

### Simpan Item
<a name="save-an-item"></a>

Buat item:

```
Table table = Table.LoadTable(client, "Books");
id = Guid.NewGuid().ToString();
var books = new Document();
books["Id"] = id;
books["Author"] = "Mark Twain";
books["Title"] = "Adventures of Huckleberry Finn";
books["ISBN"] = "112-111111";
books["Price"] = "10";
```

Simpan item ke tabel DynamoDB:

```
var book = await table.PutItemAsync(books);
```

### Ambil Item
<a name="retrieve-an-item"></a>

Untuk mengambil item:

```
public async Task GetItemAsync(AWSCredentials credentials, RegionEndpoint region)
{
      var client = new AmazonDynamoDBClient(credentials, region);
      Table books = Table.LoadTable(client, "Books");
      var book = await books.GetItemAsync(id);
}
```

### Perbarui Item
<a name="update-an-item"></a>

Untuk memperbarui item:

```
public async Task UpdateItemAttributesAsync(AWSCredentials credentials, RegionEndpoint region)
{
      var book = new Document();
      book["Id"] = id;
      book["PageCount"] = "200";
      var client = new AmazonDynamoDBClient(credentials, region);
      Table books = Table.LoadTable(client, "Books");
      Document updatedBook = await books.UpdateItemAsync(book);
}
```

Untuk memperbarui item secara bersyarat:

```
public async Task UpdateItemConditionallyAsync(AWSCredentials credentials, RegionEndpoint region) {
      var book = new Document();
      book["Id"] = id;
      book["Price"] = "30";

      // For conditional price update, creating a condition expression.
      Expression expr = new Expression();
      expr.ExpressionStatement = "Price = :val";
      expr.ExpressionAttributeValues[":val"] = 10.00;

      var client = new AmazonDynamoDBClient(credentials, region);
      Table books = Table.LoadTable(client, "Books");

      Document updatedBook = await books.UpdateItemAsync(book);
}
```

### Hapus Item
<a name="delete-an-item"></a>

Untuk menghapus item:

```
public async Task DeleteItemAsync(AWSCredentials credentials, RegionEndpoint region)
{
  var client = new AmazonDynamoDBClient(credentials, region);
  Table books = Table.LoadTable(client, "Books");
  await books.DeleteItemAsync(id);
}
```

### Melakukan Kueri dan Pemindaian
<a name="query-and-scan"></a>

Untuk melakukan kueri dan mengambil semua buku yang penulisnya adalah “Mark Twain”:

```
public async Task QueryAsync(AWSCredentials credentials, RegionEndpoint region) {
  var client = new AmazonDynamoDBClient(credentials, region);
  Table books = Table.LoadTable(client, "Books");
  var search = books.Query(new QueryOperationConfig() {
   IndexName = "Author-Title-index",
   Filter = new QueryFilter("Author", QueryOperator.Equal, "Mark Twain")
  });
  Console.WriteLine("ScanAsync: printing query response");
  var documents = await search.GetRemainingAsync();
  documents.ForEach((d) = > {
   PrintDocument(d);
  });
}
```

Memindai contoh kode di bawah ini akan mengembalikan semua buku dalam tabel kami:

```
public async Task ScanAsync(AWSCredentials credentials, RegionEndpoint region) {
      var client = new AmazonDynamoDBClient(credentials, region);
      Table books = Table.LoadTable(client, "Books");
      var search = books.Scan(new ScanOperationConfig() {
              ConsistentRead = true
      });
      Console.WriteLine("ScanAsync: printing scan response");
      var documents = await search.GetRemainingAsync();
      documents.ForEach((d) = > {
              PrintDocument(d);
      });
}
```

# Menggunakan Model Persistensi Objek
<a name="dynamodb-integration-objectpersistencemodel"></a>

AWS Mobile SDK for .NET and Xamarin menyediakan model Persistensi Objek yang memungkinkan Anda memetakan kelas sisi klien Anda ke tabel DynamoDB. Setiap instans objek memetakan ke item dalam tabel yang sesuai. Untuk menyimpan objek sisi klien Anda ke tabel, model Object Persistence menyediakan DBContext kelas Dynamo, titik masuk ke DynamoDB. Kelas ini menyediakan koneksi ke DynamoDB dan memungkinkan Anda mengakses tabel, melakukan berbagai operasi CRUD, dan menjalankan kueri.

Model Persistensi Objek tidak menyediakan API untuk membuat, memperbarui, atau menghapus tabel. Model ini hanya menyediakan operasi data. Untuk membuat, memperbarui, dan menghapus tabel, Anda harus menggunakan API tingkat rendah. Untuk petunjuk tentang cara menggunakan API tingkat rendah, lihat [Menggunakan Level Layanan DynamoDB](dynamodb-integration-lowlevelapi.md). APIs

## Ikhtisar
<a name="overview"></a>

Model Object Persistence menyediakan satu set atribut untuk memetakan kelas sisi klien ke tabel, dan properties/fields atribut tabel. Model Persistensi Objek men-support pemetaan eksplisit dan default antara properti kelas dan atribut tabel.
+  **Pemetaan eksplisit**: Untuk memetakan properti ke kunci utama, Anda harus menggunakan atribut model Dynamo DBHash Key dan Dynamo DBRange Key Object Persistence. Selain itu, untuk atribut kunci non-primer, jika nama properti di kelas Anda dan atribut tabel yang sesuai yang ingin Anda petakan tidak sama, maka Anda harus menentukan pemetaan dengan secara eksplisit menambahkan atribut Dynamo. DBProperty
+  **Pemetaan default** - Secara default, model Persistensi Objek memetakan properti kelas ke atribut dengan nama yang sama dalam tabel.

Anda tidak perlu memetakan setiap properti kelas tunggal. Anda mengidentifikasi properti ini dengan menambahkan DBIgnore atribut Dynamo. Menyimpan dan mengambil sebuah instans dari sebuah objek akan menghilangkan properti yang ditandai dengan atribut ini.

## Tipe Data yang Didukung
<a name="supported-data-types"></a>

Model Persistensi Objek mendukung sekumpulan jenis data .NET primitif, koleksi, dan jenis data arbitrer. Model ini mendukung jenis data primitif berikut.
+ bool
+ byte
+ char
+ DateTime
+ desimal, ganda, mengambang
+ Int16, Int32, Int64
+ SByte
+ string
+ UInt16, UInt32, UInt64

Model Persistensi Objek juga mendukung jenis kumpulan .NET dengan keterbatasan sebagai berikut:
+ Jenis koleksi harus mengimplementasikan ICollection antarmuka.
+ Jenis kumpulan harus terdiri dari tipe primitif yang didukung. Misalnya, ICollection<string>, ICollection<bool>.
+ Jenis kumpulan harus menyediakan konstruktor nir-parameter.

Untuk informasi lebih lanjut tentang model Persistensi Objek, lihat [Model Persistensi Objek .NET](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DotNetSDKHighLevel.html).

## Membuat Klien DynamoDB
<a name="create-a-dynamodb-client"></a>

Untuk membuat klien DynamoDB:

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

## Operasi CRUD
<a name="crud-operations"></a>

### Menyimpan Objek
<a name="save-an-object"></a>

Membuat objek:

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

Menyimpan objek ke tabel DynamoDB:

```
context.Save(myBook);
```

### Mengambil Objek
<a name="retrieve-an-object"></a>

Untuk mengambil sebuah objek:

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

### Memperbarui Obyek
<a name="update-an-object"></a>

Untuk memperbarui objek:

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

### Menghapus Objek
<a name="delete-an-object"></a>

Untuk menghapus objek:

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

## Melakukan Kueri dan Pemindaian
<a name="query-and-scan"></a>

Untuk melakukan kueri dan mengambil semua buku yang penulisnya adalah “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());
  });
}
```

Memindai contoh kode di bawah ini akan mengembalikan semua buku dalam tabel kami:

```
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());
  });
}
```

# Menggunakan Level Layanan DynamoDB APIs
<a name="dynamodb-integration-lowlevelapi"></a>

Tingkat Layanan Dynamo APIs memungkinkan Anda membuat, memperbarui, dan menghapus tabel. Anda dapat menggunakan API tingkat rendah untuk melakukan operasi pembuatan, pembacaan, pembaruan, dan penghapusan (CRUD) biasanya pada suatu item dalam tabel.

## Membuat Klien DynamoDB
<a name="create-a-dynamodb-client"></a>

Untuk membuat klien DynamoDB:

```
AmazonDynamoDBClient client = new AmazonDynamoDBClient(credentials,region);
```

## Operasi CRUD
<a name="crud-operations"></a>

### Simpan Item
<a name="save-an-item"></a>

Untuk menyimpan item ke tabel DynamoDB:

```
// Create a client
AmazonDynamoDBClient client = new AmazonDynamoDBClient(credentials,region);

// Define item attributes
Dictionary<string, AttributeValue> attributes = new Dictionary<string, AttributeValue>();

// Author is hash-key
attributes["Author"] = new AttributeValue { S = "Mark Twain" };
attributes["Title"] = new AttributeValue { S = "The Adventures of Tom Sawyer" };
attributes["PageCount"] = new AttributeValue { N = "275" };
attributes["Price"] = new AttributeValue{N = "10.00"};
attributes["Id"] = new AttributeValue{N="10"};
attributes["ISBN"] = new AttributeValue{S="111-1111111"};

// Create PutItem request
PutItemRequest request = new PutItemRequest
{
    TableName = "Books",
    Item = attributes
};

// Issue PutItem request
var response = await client.PutItemAsync(request);
```

### Ambil Item
<a name="retrieve-an-item"></a>

Untuk mengambil item:

```
// Create a client
AmazonDynamoDBClient client = new AmazonDynamoDBClient(credentials,region);

Dictionary<string, AttributeValue> key = new Dictionary<string, AttributeValue>
{
    { "Id", new AttributeValue { N = "10" } }
};

// Create GetItem request
GetItemRequest request = new GetItemRequest
{
    TableName = "Books",
    Key = key,
};

// Issue request
var result = await client.GetItemAsync(request);

// View response
Console.WriteLine("Item:");
Dictionary<string, AttributeValue> item = result.Item;
foreach (var keyValuePair in item)
{
    Console.WriteLine("Author := {0}", item["Author"]);
    Console.WriteLine("Title := {0}", item["Title"]);
    Console.WriteLine("Price:= {0}", item["Price"]);
    Console.WriteLine("PageCount := {0}", item["PageCount"]);
}
```

### Perbarui Item
<a name="update-an-item"></a>

Untuk memperbarui item:

```
// Create a client
AmazonDynamoDBClient client = new AmazonDynamoDBClient(credentials,region);

Dictionary<string, AttributeValue> key = new Dictionary<string, AttributeValue>
{
    { "Id", new AttributeValue { N = "10" } }
};

// Define attribute updates
Dictionary<string, AttributeValueUpdate> updates = new Dictionary<string, AttributeValueUpdate>();
// Add a new string to the item's Genres SS attribute
updates["Genres"] = new AttributeValueUpdate()
{
    Action = AttributeAction.ADD,
    Value = new AttributeValue { SS = new List<string> { "Bildungsroman" } }
};

// Create UpdateItem request
UpdateItemRequest request = new UpdateItemRequest
{
    TableName = "Books",
    Key = key,
    AttributeUpdates = updates
};

// Issue request
var response = await client.UpdateItemAsync(request);
```

### Menghapus Item
<a name="delete-an-item"></a>

Untuk menghapus item:

```
// Create a client
AmazonDynamoDBClient client = new AmazonDynamoDBClient(credentials,region);

Dictionary<string, AttributeValue> key = new Dictionary<string, AttributeValue>
{
  { "Id", new AttributeValue { N = "10" } }
};

// Create DeleteItem request
DeleteItemRequest request = new DeleteItemRequest
{
  TableName = "Books",
  Key = key
};

// Issue request
var response = await client.DeleteItemAsync(request);
```

## Melakukan Kueri dan Pemindaian
<a name="query-and-scan"></a>

Untuk melakukan kueri dan mengambil semua buku yang penulisnya adalah “Mark Twain”:

```
public void Query(AWSCredentials credentials, RegionEndpoint region) {
  using(var client = new AmazonDynamoDBClient(credentials, region)) {
    var queryResponse = await client.QueryAsync(new QueryRequest() {
      TableName = "Books",
      IndexName = "Author-Title-index",
      KeyConditionExpression = "Author = :v_Id",
      ExpressionAttributeValues = new Dictionary < string, AttributeValue > {
        {
          ":v_Id", new AttributeValue {
            S = "Mark Twain"
          }
        }
      }
    });
    queryResponse.Items.ForEach((i) = > {
      Console.WriteLine(i["Title"].S);
    });

  }
}
```

Memindai contoh kode di bawah ini akan mengembalikan semua buku dalam tabel kami:

```
public void Scan(AWSCredentials credentials, RegionEndpoint region) {
      using(var client = new AmazonDynamoDBClient(credentials, region)) {
              var queryResponse = client.Scan(new ScanRequest() {
                      TableName = "Books"
              });
              queryResponse.Items.ForEach((i) = > {
                      Console.WriteLine(i["Title"].S);
              });
      }
}
```