Latihan - Koneksi ke Azure Cosmos DB untuk NoSQL
Kelas CosmosDbService
berisi implementasi stub layanan yang mirip dengan kelas yang OpenAiService
Anda kerjakan sebelumnya dalam modul ini. Sebaliknya, kelas ini menggunakan .NET SDK untuk Azure Cosmos DB, yang bekerja sedikit berbeda.
Ada beberapa persyaratan utama untuk mengatasi dalam latihan ini:
- Mengimpor .NET SDK untuk Azure Cosmos DB untuk NoSQL
- Menambahkan titik akhir dan kunci Azure Cosmos DB for NoSQL ke pengaturan aplikasi
- Mengubah kelas layanan dengan berbagai anggota dan instans klien
Mengimpor .NET SDK
Paket Microsoft.Azure.Cosmos
NuGet adalah pustaka yang diketik yang menyederhanakan proses mengakses Azure Cosmos DB for NoSQL dari aplikasi .NET.
Buka terminal baru.
Microsoft.Azure.Cosmos
Impor paket dari NuGet dengandotnet add package
.dotnet add package Microsoft.Azure.Cosmos --version 3.*
Bangun proyek .NET sekali lagi.
dotnet build
Tutup terminal.
Menambahkan pengaturan aplikasi
appsettings.Development.json
Gunakan file lagi untuk menyediakan nilai saat ini untuk titik akhir dan kunci Azure Cosmos DB for NoSQL.
Buka appsettings . File Development.json .
Dalam file, buat objek JSON baru lain dengan properti tempat penampung untuk
CosmosDb
pengaturan.{ "OpenAi": { "Endpoint": "<your-azure-openai-endpoint>", "Key": "<your-azure-openai-key>" }, "CosmosDb": { } }
CosmosDb
Dalam properti , buat dua properti baru untukEndpoint
danKey
. Gunakan titik akhir Azure Cosmos DB dan pengaturan kunci yang Anda rekam sebelumnya dalam proyek ini.{ "OpenAi": { "Endpoint": "<your-azure-openai-endpoint>", "Key": "<your-azure-openai-key>" }, "CosmosDb": { "Endpoint": "<your-azure-cosmos-db-endpoint>", "Key": "<your-azure-cosmos-db-key>" } }
Dengan asumsi nama akun Azure Cosmos DB adalah nybncrsna76fo-cosmos-nosql dan kuncinya adalah
Aj2OSQqWhXfFzkITIi4MIbocWAAoBCUWnSPzHlQbDYA3TiyZCJlk8A6R1l6WqD45BxAG5vrsyQ4SCXEkPS1pLh==
, Anda akan mengonfigurasi objek JSON seperti contoh ini.{ "OpenAi": { "Endpoint": "<your-azure-openai-endpoint>", "Key": "<your-azure-openai-key>" }, "CosmosDb": { "Endpoint": "https://nybncrsna76fo-cosmos-nosql.documents.azure.com:443/", "Key": "Aj2OSQqWhXfFzkITIi4MIbocWAAoBCUWnSPzHlQbDYA3TiyZCJlk8A6R1l6WqD45BxAG5vrsyQ4SCXEkPS1pLh==" } }
Catatan
Kunci dalam contoh ini adalah fiktif.
Simpan appsettings . File Development.json .
Menambahkan anggota yang diperlukan dan instans klien
Terakhir, terapkan variabel kelas dan klien yang diperlukan untuk mengakses Azure Cosmos DB untuk NoSQL menggunakan klien. Untuk langkah ini, gunakan kelas klien SDK untuk menerapkan instans jenis Container
di CosmosDbService
kelas .
Buka file Services/CosmosDbService.cs.
Tambahkan menggunakan direktif untuk namespace berikut.
Microsoft.Azure.Cosmos
Microsoft.Azure.Cosmos.Fluent
using Microsoft.Azure.Cosmos; using Microsoft.Azure.Cosmos.Fluent;
CosmosDbService
Dalam kelas , tambahkan variabel baruContainer
-typed bernama_container
.private readonly Container _container;
Dalam konstruktor, tambahkan
ArgumentNullException.ThrowIfNullOrEmpty
pemeriksaan untuk melemparkan kesalahan jikaendpoint
parameter ataukey
null.ArgumentNullException.ThrowIfNullOrEmpty(endpoint); ArgumentNullException.ThrowIfNullOrEmpty(key);
Sekarang, buat variabel bernama
options
jenisCosmosSerializationOptions
. AturPropertyNamingPolicy
properti variabel keCosmosPropertyNamingPolicy.CamelCase
.CosmosSerializationOptions options = new() { PropertyNamingPolicy = CosmosPropertyNamingPolicy.CamelCase };
Catatan
Mengatur properti ini akan memastikan bahwa JSON yang diproduksi oleh SDK diserialisasikan dan dideserialisasi dalam kasus unta terlepas dari bagaimana properti yang sesuai dikaitkan di kelas .NET.
Buat instans
CosmosClient
jenis baru bernamaclient
menggunakanCosmosClientBuilder
opsi kelas, titik akhir, kunci, dan serialisasi yang Anda tentukan sebelumnya.CosmosClient client = new CosmosClientBuilder(endpoint, key) .WithSerializerOptions(options) .Build();
Buat variabel jenis
Database
nullable baru bernamadatabase
dengan memanggilGetDatabase
metode variabel klien.Database? database = client?.GetDatabase(databaseName);
Buat variabel nullable lain bernama
container
jenisContainer
dengan memanggilGetContainer
metode variabel database.Container? container = database?.GetContainer(containerName);
Terakhir, tetapkan variabel konstruktor
container
ke variabel kelas_container
hanya jika tidak null. Jika null, lempar .ArgumentException
_container = container ?? throw new ArgumentException("Unable to connect to existing Azure Cosmos DB container or database.");
Tip
Blok kode ini menggunakan operator coalescing null untuk memeriksa apakah variabel null sebelum melakukan penugasan.
Simpan file Services/CosmosDbService.cs.
Periksa pekerjaan Anda
Pada titik ini, konstruktor Anda harus menyertakan logika yang cukup untuk membuat instans kontainer yang digunakan layanan lainnya. Karena kelas belum melakukan apa pun dengan kontainer, tidak ada gunanya menjalankan aplikasi web, tetapi ada nilai dalam membangun aplikasi untuk memastikan kode Anda tidak memiliki kelalaian atau kesalahan.
Buka terminal baru.
Bangun proyek .NET.
dotnet build
Amati output build dan periksa untuk memastikan tidak ada kesalahan build.
MSBuild version 17.5.1+f6fdcf537 for .NET Determining projects to restore... All projects are up-to-date for restore. cosmoschatgpt -> /workspaces/cosmosdb-chatgpt/bin/Debug/net8.0/cosmoschatgpt.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:06.45
Tutup terminal.