Latihan - Membuat item baru
Ingat bahwa Anda dapat membuat item di dalam kontainer Anda menggunakan SDK Azure Cosmos DB untuk .NET. Untuk proyek ini, kontainer produk berisi item produk individual dan item kategori khusus untuk setiap kategori. Ada dua kasus yang ingin Anda tangani di aplikasi ini:
- Jika kategori kosong, bukan masalah jika membuat item kategori tersebut satu per satu. Tidak ada item produk terkait untuk dibuat.
- Namun, jika kategori menyertakan produk terkait, Anda ingin membuat item kategori dan item produk terkait secara bersamaan.
Saat ini, Anda memiliki dua persyaratan kunci:
- Membuat item satu per satu sebagai operasi tunggal
- Menggunakan batch transaksional untuk membuat beberapa item terkait
Setelah Anda menyelesaikan latihan ini, proyek Anda akan memiliki logika untuk membuat item di kontainer Anda baik satu per satu atau sebagai batch.
Menambahkan item individual ke kontainer
Di Azure Cosmos DB, Anda dapat membuat, mengganti, atau melakukan upsert item ke kontainer. Membuat item mengharuskan item memiliki pengidentifikasi unik. Mengganti item mengharuskan item sudah ada. Upsert adalah yang terbaik dari kedua dunia, di mana ia memeriksa pengidentifikasi unik, lalu mengganti atau membuat item. Untuk proyek ini, Anda ingin dapat menjalankan aplikasi beberapa kali tanpa kesalahan, membuat upsert pilihan yang jelas. Untuk item pertama kami, kami membuat kategori yang tidak memiliki produk terkait. Di sini, Anda menerapkan satu operasi upsert dengan kategori yang dibuat secara manual.
Buka file Program.cs lagi.
Buat instans Kategori baru bernama
goggles
dengan nilai berikut:Properti Nilai id ef7fa0f1-0e9d-4435-aaaf-a778179a94ad
categoryId gear-snow-goggles
Category goggles = new( Id: "ef7fa0f1-0e9d-4435-aaaf-a778179a94ad", CategoryId: "gear-snow-goggles" );
Buat instans PartitionKey baru menggunakan nilai yang sama dengan properti
categoryId
untuk instans Kategori yang Anda buat sebelumnya.PartitionKey gogglesKey = new("gear-snow-goggles");
Gunakan metode UpsertItemAsync untuk membuat atau mengganti item yang melewati objek untuk item yang akan dibuat dan nilai kunci partisi.
Category result = await container.UpsertItemAsync(goggles, gogglesKey);
Cetak berbagai properti
result
ke konsol termasuk: Pengenal unik item dan jenis item.Console.WriteLine($"[New item created]:\t{result.Id}\t(Type: {result.Type})");
Buat instans Kategori baru bernama
helmets
dengan nilai berikut:Properti Nilai id 91f79374-8611-4505-9c28-3bbbf1aa7df7
categoryId gear-climb-helmets
Category helmets = new( Id: "91f79374-8611-4505-9c28-3bbbf1aa7df7", CategoryId: "gear-climb-helmets" );
Buat instans PartitionKey baru menggunakan nilai yang sama dengan properti
categoryId
untuk instans Kategori yang Anda buat sebelumnya.PartitionKey helmetsKey = new("gear-climb-helmets");
Gunakan metode UpsertItemAsync untuk membuat atau mengganti item. Teruskan objek untuk item yang akan dibuat dan nilai kunci partisi. Kembalikan objek jenis ItemResponse<T>.
ItemResponse<Category> response = await container.UpsertItemAsync(helmets, helmetsKey);
Cetak berbagai properti
response
ke konsol termasuk: Pengenal unik item yang mendasar, jenis item yang mendasar, dan biaya permintaan dalam RU.Console.WriteLine($"[New item created]:\t{response.Resource.Id}\t(Type: {response.Resource.Type})\t(RUs: {response.RequestCharge})");
Simpan file Program.cs.
Menerapkan beberapa operasi sebagai batch transaksional
Sekarang, pertimbangkan skenario di mana Anda ingin membuat beberapa produk bersama dengan kategori. Jika produk sudah dibuat, tetapi kategorinya tidak ada, produk tersebut hampir tidak berguna. Membuat beberapa item adalah situasi saat Anda dapat menggunakan transaksi untuk mengelompokkan beberapa operasi "titik" bersamaan sehingga semuanya berhasil atau gagal sebagai satu unit kohesif. Kembali ke skenario kita, kita perlu membuat kategori untuk tenda luar ruangan dengan beberapa produk tenda. Kita sudah memiliki satu item kategori tanpa item produk apa pun. Beginilah seharusnya hasil akhir yang kita dapat:
Di bagian ini, kami membuat batch transaksi untuk membuat tents
kategori dan produk terkait bersama-sama.
Di Program.cs, buat instans Kategori baru bernama
tents
dengan nilai berikut:Properti Nilai id 5df21ec5-813c-423e-9ee9-1a2aaead0be4
categoryId gear-camp-tents
Category tents = new( Id: "5df21ec5-813c-423e-9ee9-1a2aaead0be4", CategoryId: "gear-camp-tents" );
Buat empat instans jenis Produk menggunakan nilai-nilai ini.
Properti cirroa
kuloar
mammatin
nimbolo
Id e8dddee4-9f43-4d15-9b08-0d7f36adcac8
e6f87b8d-8cd7-4ade-a005-14d3e2fbd1aa
f7653468-c4b8-47c9-97ff-451ee55f4fd5
6e3b7275-57d4-4418-914d-14d1baca0979
CategoryId gear-camp-tents
gear-camp-tents
gear-camp-tents
gear-camp-tents
Nama Cirroa Tent
Kuloar Tent
Mammatin Tent
Nimbolo Tent
Harga 490.00
530.00
0.00
330.00
Diarsipkan false
false
true
false
Kuantitas 15
8
0
35
Product cirroa = new( Id: "e8dddee4-9f43-4d15-9b08-0d7f36adcac8", CategoryId: "gear-camp-tents" ){ Name = "Cirroa Tent", Price = 490.00m, Archived = false, Quantity = 15 };
Product kuloar = new( Id: "e6f87b8d-8cd7-4ade-a005-14d3e2fbd1aa", CategoryId: "gear-camp-tents" ){ Name = "Kuloar Tent", Price = 530.00m, Archived = false, Quantity = 8 };
Product mammatin = new( Id: "f7653468-c4b8-47c9-97ff-451ee55f4fd5", CategoryId: "gear-camp-tents" ){ Name = "Mammatin Tent", Price = 0.00m, Archived = true, Quantity = 0 };
Product nimbolo = new( Id: "6e3b7275-57d4-4418-914d-14d1baca0979", CategoryId: "gear-camp-tents" ){ Name = "Nimbolo Tent", Price = 330.00m, Archived = false, Quantity = 35 };
Sekarang, buat instans PartitionKey baru menggunakan nilai
gear-camp-tents
.PartitionKey tentsKey = new("gear-camp-tents");
Buat batch transaksional baru yang dilingkup ke nilai kunci partisi
gear-camp-tents
menggunakan metode CreateTransactionalBatch(PartitionKey). Dengan menggunakan sintaks fasih, tambahkan lima operasi upsert untuk membuat item yang kita butuhkan di kontainer kita untuk kategori dan semua produk terkait.TransactionalBatch batch = container.CreateTransactionalBatch(tentsKey) .UpsertItem<Category>(tents) .UpsertItem<Product>(cirroa) .UpsertItem<Product>(kuloar) .UpsertItem<Product>(mammatin) .UpsertItem<Product>(nimbolo);
Keluarkan pesan ke konsol untuk menunjukkan bahwa kita memulai operasi batch.
Console.WriteLine("[Batch started]");
Gunakan metode
TransactionalBatch.ExecuteAsync
untuk menjalankan batch dan mengembalikan jenis respons khusus.using TransactionalBatchResponse batchResponse = await batch.ExecuteAsync();
Menggunakan untuk perulangan, iterasi melalui semua item di dalam respons. Pertama, konversikan setiap item ke jenis
TransactionalBatchOperationResult
menggunakan kelas dasarItem
Anda sebagai generik. Kemudian, cetak pengenal unik dan jenis objek respons.for (int i = 0; i < batchResponse.Count; i++) { TransactionalBatchOperationResult<Item> batchResult = batchResponse.GetOperationResultAtIndex<Item>(i); Console.WriteLine($"[New item created]:\t{batchResult.Resource.Id}\t(Type: {batchResult.Resource.Type})"); }
Keluarkan pesan lain ke konsol yang menunjukkan bahwa batch selesai. Sertakan biaya permintaan untuk seluruh batch di pesan ini.
Console.WriteLine($"[Batch completed]:\t(RUs: {batchResponse.RequestCharge})");
Simpan file Program.cs.
Periksa pekerjaan Anda
Aplikasi Anda sekarang membuat beberapa item dan dirancang agar cukup tangguh dijalankan beberapa kali tanpa menyebabkan pengecualian. Di sini, Anda menjalankan aplikasi dan memeriksa output untuk pengidentifikasi unik dari masing-masing dari enam item yang baru dibuat.
Jalankan aplikasi .NET di terminal:
dotnet run
Amati output dari menjalankan aplikasi. Output harus cocok dengan contoh di sini:
... [New item created]: ef7fa0f1-0e9d-4435-aaaf-a778179a94ad (Type: Category) [New item created]: 91f79374-8611-4505-9c28-3bbbf1aa7df7 (Type: Category) (RUs: 10.29) [Batch started] [New item created]: 5df21ec5-813c-423e-9ee9-1a2aaead0be4 (Type: Category) [New item created]: e8dddee4-9f43-4d15-9b08-0d7f36adcac8 (Type: Product) [New item created]: e6f87b8d-8cd7-4ade-a005-14d3e2fbd1aa (Type: Product) [New item created]: f7653468-c4b8-47c9-97ff-451ee55f4fd5 (Type: Product) [New item created]: 6e3b7275-57d4-4418-914d-14d1baca0979 (Type: Product) [Batch completed]: (RUs: 36.76)
Tip
RU yang ditunjukkan dalam contoh output ini mungkin berbeda dengan output Anda.