Latihan - Koneksi ke Azure Cosmos DB untuk NoSQL

Selesai

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.

  1. Buka terminal baru.

  2. Microsoft.Azure.Cosmos Impor paket dari NuGet dengan dotnet add package.

    dotnet add package Microsoft.Azure.Cosmos --version 3.*
    
  3. Bangun proyek .NET sekali lagi.

    dotnet build
    
  4. 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.

  1. Buka appsettings . File Development.json .

  2. 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": {
      }
    }
    
  3. CosmosDb Dalam properti , buat dua properti baru untuk Endpoint dan Key. 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.

  4. 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 .

  1. Buka file Services/CosmosDbService.cs.

  2. Tambahkan menggunakan direktif untuk namespace berikut.

    • Microsoft.Azure.Cosmos

    • Microsoft.Azure.Cosmos.Fluent

    using Microsoft.Azure.Cosmos;
    using Microsoft.Azure.Cosmos.Fluent;
    
  3. CosmosDbService Dalam kelas , tambahkan variabel baru Container-typed bernama _container.

    private readonly Container _container;
    
  4. Dalam konstruktor, tambahkan ArgumentNullException.ThrowIfNullOrEmpty pemeriksaan untuk melemparkan kesalahan jika endpoint parameter atau key null.

    ArgumentNullException.ThrowIfNullOrEmpty(endpoint);
    ArgumentNullException.ThrowIfNullOrEmpty(key);
    
  5. Sekarang, buat variabel bernama options jenis CosmosSerializationOptions. Atur PropertyNamingPolicy properti variabel ke CosmosPropertyNamingPolicy.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.

  6. Buat instans CosmosClient jenis baru bernama client menggunakan CosmosClientBuilder opsi kelas, titik akhir, kunci, dan serialisasi yang Anda tentukan sebelumnya.

    CosmosClient client = new CosmosClientBuilder(endpoint, key)
        .WithSerializerOptions(options)
        .Build();
    
  7. Buat variabel jenis Database nullable baru bernama database dengan memanggil GetDatabase metode variabel klien.

    Database? database = client?.GetDatabase(databaseName);
    
  8. Buat variabel nullable lain bernama container jenis Container dengan memanggil GetContainer metode variabel database.

    Container? container = database?.GetContainer(containerName);
    
  9. 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.

  10. 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.

  1. Buka terminal baru.

  2. Bangun proyek .NET.

    dotnet build
    
  3. 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
    
  4. Tutup terminal.