

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

# DBContext Kelas Dynamo dari model persistensi objek.NET
<a name="DotNetDynamoDBContext"></a>

Kelas `DynamoDBContext` adalah titik masuk ke basis data Amazon DynamoDB. Kelas ini menyediakan koneksi ke DynamoDB dan memungkinkan Anda mengakses data dalam berbagai tabel, melakukan berbagai operasi CRUD, dan menjalankan kueri. Kelas `DynamoDBContext` menyediakan metode berikut.

**Topics**
+ [Buat MultiTable BatchGet](#w2aac17b9c21c23c39b7)
+ [Buat MultiTable BatchWrite](#w2aac17b9c21c23c39b9)
+ [CreateBatchGet](#w2aac17b9c21c23c39c11)
+ [CreateBatchWrite](#w2aac17b9c21c23c39c13)
+ [Delete](#w2aac17b9c21c23c39c15)
+ [Dispose](#w2aac17b9c21c23c39c17)
+ [ExecuteBatchGet](#w2aac17b9c21c23c39c19)
+ [ExecuteBatchWrite](#w2aac17b9c21c23c39c21)
+ [FromDocument](#w2aac17b9c21c23c39c23)
+ [FromQuery](#w2aac17b9c21c23c39c25)
+ [FromScan](#w2aac17b9c21c23c39c27)
+ [GetTargetTable](#w2aac17b9c21c23c39c29)
+ [Muat](#w2aac17b9c21c23c39c31)
+ [Kueri](#w2aac17b9c21c23c39c33)
+ [Save](#w2aac17b9c21c23c39c35)
+ [Pindai](#w2aac17b9c21c23c39c37)
+ [ToDocument](#w2aac17b9c21c23c39c39)
+ [Menentukan parameter opsional untuk Dynamo DBContext](#OptionalConfigParams)

## Buat MultiTable BatchGet
<a name="w2aac17b9c21c23c39b7"></a>

Membuat objek `MultiTableBatchGet`, yang terdiri dari beberapa objek `BatchGet` individual. Setiap objek `BatchGet` dapat digunakan untuk mengambil item dari tabel DynamoDB tunggal.

Untuk mengambil item dari tabel, gunakan metode `ExecuteBatchGet`, dengan meneruskan objek `MultiTableBatchGet` sebagai parameter.

## Buat MultiTable BatchWrite
<a name="w2aac17b9c21c23c39b9"></a>

Membuat objek `MultiTableBatchWrite`, yang terdiri dari beberapa objek `BatchWrite` individual. Setiap objek `BatchWrite` dapat digunakan untuk menulis atau menghapus item dalam tabel DynamoDB tunggal.

Untuk menulis ke tabel, gunakan metode `ExecuteBatchWrite`, dengan meneruskan objek `MultiTableBatchWrite` sebagai parameter.

## CreateBatchGet
<a name="w2aac17b9c21c23c39c11"></a>

Membuat objek `BatchGet` yang dapat Anda gunakan untuk mengambil beberapa item dari tabel. 

## CreateBatchWrite
<a name="w2aac17b9c21c23c39c13"></a>

Membuat objek `BatchWrite` yang dapat Anda gunakan untuk menempatkan beberapa item ke dalam tabel, atau untuk menghapus beberapa item dari tabel. 

## Delete
<a name="w2aac17b9c21c23c39c15"></a>

Menghapus item dari tabel. Metode ini memerlukan kunci primer dari item yang ingin Anda hapus. Anda dapat memberikan nilai kunci primer maupun objek sisi klien yang berisi nilai kunci primer sebagai parameter untuk metode ini.
+ Jika Anda menentukan objek sisi klien sebagai parameter dan Anda telah mengaktifkan penguncian optimis, penghapusan hanya akan berhasil jika versi sisi klien dan sisi server objek cocok.
+ Jika Anda hanya menetapkan nilai kunci primer sebagai parameter, penghapusan akan berhasil terlepas dari apakah Anda telah mengaktifkan penguncian optimis atau tidak.

**catatan**  
Untuk melakukan operasi ini di latar belakang, gunakan metode `DeleteAsync`.

## Dispose
<a name="w2aac17b9c21c23c39c17"></a>

Membuang semua sumber daya yang dikelola dan tidak dikelola.

## ExecuteBatchGet
<a name="w2aac17b9c21c23c39c19"></a>

Membaca data dari satu atau beberapa tabel, yang memproses semua objek `BatchGet` dalam `MultiTableBatchGet`.

**catatan**  
Untuk melakukan operasi ini di latar belakang, gunakan metode `ExecuteBatchGetAsync`.

## ExecuteBatchWrite
<a name="w2aac17b9c21c23c39c21"></a>

Menulis atau menghapus data dalam satu atau beberapa tabel, yang memproses semua objek `BatchWrite` dalam `MultiTableBatchWrite`.

**catatan**  
Untuk melakukan operasi ini di latar belakang, gunakan metode `ExecuteBatchWriteAsync`.

## FromDocument
<a name="w2aac17b9c21c23c39c23"></a>

Mengingat instans `Document`, metode `FromDocument` akan mengembalikan instans dari kelas sisi klien.

Langkah ini membantu jika Anda ingin menggunakan kelas model dokumen bersama dengan model persistensi objek untuk melakukan operasi data. Untuk informasi selengkapnya tentang kelas model dokumen yang disediakan oleh AWS SDK untuk .NET, lihat[Bekerja dengan model dokumen.NET di DynamoDB](DotNetSDKMidLevel.md).

Misalkan Anda memiliki objek `Document` bernama `doc`, yang berisi representasi item `Forum`. (Untuk mengetahui cara membuat objek ini, lihat deskripsi untuk metode `ToDocument` nanti dalam topik ini.) Anda dapat menggunakan `FromDocument` untuk mengambil item `Forum` dari `Document`, seperti yang ditunjukkan dalam contoh kode C\$1 berikut.

**Example**  

```
forum101 = context.FromDocument<Forum>(101);
```

**catatan**  
Jika objek `Document` mengimplementasikan antarmuka `IEnumerable`, Anda dapat menggunakan metode `FromDocuments` sebagai gantinya. Metode ini memungkinkan Anda melakukan iterasi pada semua instans kelas dalam `Document`.

## FromQuery
<a name="w2aac17b9c21c23c39c25"></a>

Menjalankan operasi `Query`, dengan parameter kueri yang didefinisikan dalam objek `QueryOperationConfig`.

**catatan**  
Untuk melakukan operasi ini di latar belakang, gunakan metode `FromQueryAsync`.

## FromScan
<a name="w2aac17b9c21c23c39c27"></a>

Menjalankan operasi `Scan`, dengan parameter pemindaian yang didefinisikan dalam objek `ScanOperationConfig`.

**catatan**  
Untuk melakukan operasi ini di latar belakang, gunakan metode `FromScanAsync`.

## GetTargetTable
<a name="w2aac17b9c21c23c39c29"></a>

Mengambil tabel target untuk jenis yang ditentukan. Langkah ini berguna jika Anda menulis konverter khusus untuk memetakan data arbitrer ke tabel DynamoDB, dan Anda perlu menentukan tabel yang terkait dengan jenis data khusus.

## Muat
<a name="w2aac17b9c21c23c39c31"></a>

Mengambil item dari tabel. Metode ini hanya memerlukan kunci primer dari item yang ingin Anda ambil. 

Secara default, DynamoDB akan mengembalikan item dengan nilai yang akhirnya konsisten. Untuk informasi tentang model konsistensi akhir, lihat [DynamoDB membaca konsistensi](HowItWorks.ReadConsistency.md).

`Load`atau `LoadAsync` metode memanggil [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html)operasi, yang mengharuskan Anda untuk menentukan kunci utama untuk tabel. Karena `GetItem` mengabaikan `IndexName` parameter, Anda tidak dapat memuat item menggunakan partisi indeks atau kunci sortir. Oleh karena itu, Anda harus menggunakan kunci utama tabel untuk memuat item.

**catatan**  
Untuk melakukan operasi ini di latar belakang, gunakan metode `LoadAsync`. Untuk melihat contoh penggunaan `LoadAsync` metode untuk melakukan operasi CRUD tingkat tinggi pada tabel DynamoDB, lihat contoh berikut.

```
    /// <summary>
    /// Shows how to perform high-level CRUD operations on an Amazon DynamoDB
    /// table.
    /// </summary>
    public class HighLevelItemCrud
    {
        public static async Task Main()
        {
            var client = new AmazonDynamoDBClient();
            DynamoDBContext context = new DynamoDBContext(client);
            await PerformCRUDOperations(context);
        }

        public static async Task PerformCRUDOperations(IDynamoDBContext context)
        {
            int bookId = 1001; // Some unique value.
            Book myBook = new Book
            {
                Id = bookId,
                Title = "object persistence-AWS SDK for.NET SDK-Book 1001",
                Isbn = "111-1111111001",
                BookAuthors = new List<string> { "Author 1", "Author 2" },
            };

            // Save the book to the ProductCatalog table.
            await context.SaveAsync(myBook);

            // Retrieve the book from the ProductCatalog table.
            Book bookRetrieved = await context.LoadAsync<Book>(bookId);

            // Update some properties.
            bookRetrieved.Isbn = "222-2222221001";

            // Update existing authors list with the following values.
            bookRetrieved.BookAuthors = new List<string> { " Author 1", "Author x" };
            await context.SaveAsync(bookRetrieved);

            // Retrieve the updated book. This time, add the optional
            // ConsistentRead parameter using DynamoDBContextConfig object.
            await context.LoadAsync<Book>(bookId, new DynamoDBContextConfig
            {
                ConsistentRead = true,
            });

            // Delete the book.
            await context.DeleteAsync<Book>(bookId);

            // Try to retrieve deleted book. It should return null.
            Book deletedBook = await context.LoadAsync<Book>(bookId, new DynamoDBContextConfig
            {
                ConsistentRead = true,
            });

            if (deletedBook == null)
            {
                Console.WriteLine("Book is deleted");
            }
        }
    }
```

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

Mengkueri tabel berdasarkan parameter kueri yang Anda berikan.

Anda dapat mengkueri tabel hanya jika memiliki kunci primer komposit (kunci partisi dan kunci urutan). Saat mengkueri, Anda harus menentukan kunci partisi dan syarat yang berlaku untuk kunci urutan.

Katakanlah Anda memiliki kelas `Reply` sisi klien yang dipetakan ke tabel `Reply` di DynamoDB. Contoh kode C\$1 berikut mengkueri tabel `Reply` untuk menemukan balasan utas dalam forum yang diposting dalam 15 hari terakhir. Tabel `Reply` memiliki kunci primer yang berisi kunci partisi `Id` dan kunci urutan `ReplyDateTime`.

**Example**  

```
DynamoDBContext context = new DynamoDBContext(client);

string replyId = "DynamoDB#DynamoDB Thread 1"; //Partition key
DateTime twoWeeksAgoDate = DateTime.UtcNow.Subtract(new TimeSpan(14, 0, 0, 0)); // Date to compare.
IEnumerable<Reply> latestReplies = context.Query<Reply>(replyId, QueryOperator.GreaterThan, twoWeeksAgoDate);
```

Tabel ini mengembalikan koleksi objek `Reply`. 

Metode `Query` mengembalikan koleksi `IEnumerable` “lazy-loaded”. Metode ini awalnya hanya mengembalikan satu halaman hasil, lalu membuat panggilan layanan untuk halaman berikutnya jika diperlukan. Untuk mendapatkan semua item yang cocok, Anda perlu melakukan iterasi hanya pada `IEnumerable`.

Jika tabel Anda memiliki kunci primer sederhana (kunci partisi), Anda tidak dapat menggunakan metode `Query`. Sebaliknya, Anda dapat menggunakan metode `Load` dan menyediakan kunci partisi untuk mengambil item.

**catatan**  
Untuk melakukan operasi ini di latar belakang, gunakan metode `QueryAsync`.

## Save
<a name="w2aac17b9c21c23c39c35"></a>

Menyimpan objek tertentu ke tabel. Jika kunci primer yang ditentukan dalam objek input tidak ada dalam tabel, metode akan menambahkan item baru ke tabel. Jika kunci primer ada, metode akan memperbarui item yang ada.

Jika Anda mengonfigurasi penguncian optimis, pembaruan hanya akan berhasil jika versi klien dan sisi server item cocok. Untuk informasi selengkapnya, lihat [Penguncian optimis menggunakan DynamoDB dan model persistensi objek AWS SDK untuk .NET](DynamoDBContext.VersionSupport.md).

**catatan**  
Untuk melakukan operasi ini di latar belakang, gunakan metode `SaveAsync`.

## Pindai
<a name="w2aac17b9c21c23c39c37"></a>

Melakukan pemindaian pada seluruh tabel. 

Anda dapat memfilter hasil pemindaian dengan menentukan syarat pemindaian. Syarat ini dapat dievaluasi pada setiap atribut dalam tabel. Katakanlah Anda memiliki kelas sisi klien `Book` yang dipetakan ke tabel `ProductCatalog` di DynamoDB. Contoh C\$1 berikut memindai tabel dan hanya mengembalikan item buku dengan harga kurang dari 0.

**Example**  

```
IEnumerable<Book> itemsWithWrongPrice = context.Scan<Book>(
                    new ScanCondition("Price", ScanOperator.LessThan, price),
                    new ScanCondition("ProductCategory", ScanOperator.Equal, "Book")
      );
```

Metode `Scan` mengembalikan koleksi `IEnumerable` “lazy-loaded”. Metode ini awalnya hanya mengembalikan satu halaman hasil, lalu membuat panggilan layanan untuk halaman berikutnya jika diperlukan. Untuk mendapatkan semua item yang cocok, Anda hanya perlu melakukan iterasi pada `IEnumerable`.

Untuk alasan performa, Anda harus mencari tabel dan menghindari pemindaian tabel.

**catatan**  
Untuk melakukan operasi ini di latar belakang, gunakan metode `ScanAsync`.

## ToDocument
<a name="w2aac17b9c21c23c39c39"></a>

Mengembalikan instans untuk kelas model dokumen `Document` dari instans kelas Anda. 

Langkah ini membantu jika Anda ingin menggunakan kelas model dokumen bersama dengan model persistensi objek untuk melakukan operasi data. Untuk informasi selengkapnya tentang kelas model dokumen yang disediakan oleh AWS SDK untuk .NET, lihat[Bekerja dengan model dokumen.NET di DynamoDB](DotNetSDKMidLevel.md). 

Misalkan Anda memiliki kelas sisi klien yang dipetakan ke tabel `Forum` sampel. Anda kemudian dapat menggunakan `DynamoDBContext` untuk mendapatkan item sebagai objek `Document` dari tabel `Forum`, seperti yang ditunjukkan dalam contoh kode C\$1 berikut.

**Example**  

```
DynamoDBContext context = new DynamoDBContext(client);

Forum forum101 = context.Load<Forum>(101); // Retrieve a forum by primary key.
Document doc = context.ToDocument<Forum>(forum101);
```

## Menentukan parameter opsional untuk Dynamo DBContext
<a name="OptionalConfigParams"></a>

Saat menggunakan model persistensi objek, Anda dapat menentukan parameter opsional berikut untuk `DynamoDBContext`.
+ **`ConsistentRead`—**Saat mengambil data menggunakan operasi `Load`, `Query`, atau `Scan`, Anda dapat menambahkan parameter opsional ini guna meminta nilai data terbaru.
+ **`IgnoreNullValues`—**Parameter ini memberi tahu `DynamoDBContext` untuk mengabaikan nilai null pada atribut selama operasi `Save`. Jika parameter ini adalah false (atau jika tidak diatur), nilai null ditafsirkan sebagai direktif untuk menghapus atribut tertentu. 
+ **`SkipVersionCheck`—** Parameter ini memberi tahu `DynamoDBContext` untuk tidak membandingkan versi saat menyimpan atau menghapus item. Untuk informasi selengkapnya tentang penentuan versi, lihat [Penguncian optimis menggunakan DynamoDB dan model persistensi objek AWS SDK untuk .NET](DynamoDBContext.VersionSupport.md).
+ **`TableNamePrefix`—** Memberikan prefiks pada semua nama tabel dengan string tertentu. Jika parameter ini adalah null (atau jika tidak diatur), tidak ada prefiks yang digunakan.
+ `DynamoDBEntryConversion`- Menentukan skema konversi yang digunakan oleh klien. Anda dapat mengatur parameter ini ke versi V1 atau V2. V1 adalah versi default.

  Berdasarkan versi yang Anda tetapkan, perilaku parameter ini berubah. Contoh:
  + Di V1, tipe `bool` data dikonversi ke tipe `N` angka, di mana 0 mewakili false dan 1 mewakili true. Dalam V2, `bool` dikonversi ke`BOOL`.
  + Di V2, daftar dan array tidak dikelompokkan bersama. HashSets Daftar dan array numerik, tipe berbasis string, dan tipe berbasis biner dikonversi ke tipe `L` (Daftar), yang dapat dikirim kosong untuk memperbarui daftar. Ini tidak seperti V1, di mana daftar kosong tidak dikirim melalui kabel.

    Di V1, jenis koleksi, seperti Daftar, HashSet, dan array diperlakukan sama. Daftar, HashSet, dan array numerik dikonversi ke tipe `NS` (jumlah set). 

  Contoh berikut menetapkan versi skema konversi ke V2, yang mengubah perilaku konversi antara tipe.NET dan tipe data DynamoDB.

  ```
  var config = new DynamoDBContextConfig
  {
      Conversion = DynamoDBEntryConversion.V2
  };
  var contextV2 = new DynamoDBContext(client, config);
  ```

Contoh C \$1 berikut membuat yang baru `DynamoDBContext` dengan menentukan dua parameter opsional sebelumnya, dan. `ConsistentRead` `SkipVersionCheck`

**Example**  

```
AmazonDynamoDBClient client = new AmazonDynamoDBClient();
...
DynamoDBContext context =
       new DynamoDBContext(client, new DynamoDBContextConfig { ConsistentRead = true, SkipVersionCheck = true});
```

`DynamoDBContext` menyertakan parameter opsional ini dengan setiap permintaan yang Anda kirimkan menggunakan konteks ini. 

Alih-alih mengatur parameter ini di tingkat `DynamoDBContext`, Anda dapat menentukannya untuk setiap operasi yang Anda jalankan menggunakan `DynamoDBContext`, seperti yang ditunjukkan dalam contoh kode C\$1 berikut. Contoh ini memuat item buku tertentu. `Load`Metode `DynamoDBContext` menentukan `ConsistentRead` dan parameter `SkipVersionCheck` opsional.

**Example**  

```
AmazonDynamoDBClient client = new AmazonDynamoDBClient();
...
DynamoDBContext context = new DynamoDBContext(client);
Book bookItem = context.Load<Book>(productId,new DynamoDBContextConfig{ ConsistentRead = true, SkipVersionCheck = true });
```

Dalam kasus ini, `DynamoDBContext` menyertakan parameter tersebut hanya ketika mengirimkan permintaan `Get`.