Упражнение. Подключение в Azure Cosmos DB для NoSQL

Завершено

Класс CosmosDbService содержит заглушку службы, аналогичной классу, OpenAiService который вы работали ранее в этом модуле. В отличие от этого класса, этот класс использует пакет SDK для .NET для Azure Cosmos DB, который работает немного иначе.

В этом упражнении существует несколько ключевых требований.

  • Импорт пакета SDK для .NET для Azure Cosmos DB для NoSQL
  • Добавьте конечную точку Azure Cosmos DB для NoSQL и ключ к параметрам приложения
  • Изменение класса службы с различными элементами и экземпляром клиента

Импорт пакета SDK для .NET

Microsoft.Azure.Cosmos Пакет NuGet — это типизированный пакет, упрощающий процесс доступа к Azure Cosmos DB для NoSQL из приложения .NET.

  1. Откройте новый терминал.

  2. Microsoft.Azure.Cosmos Импорт пакета из NuGet с dotnet add packageпомощью .

    dotnet add package Microsoft.Azure.Cosmos --version 3.*
    
  3. Создайте проект .NET еще раз.

    dotnet build
    
  4. Закройте терминал.

Добавление параметров приложения

appsettings.Development.json Используйте файл еще раз, чтобы указать текущие значения для конечной точки и ключа Azure Cosmos DB для NoSQL.

  1. Откройте приложения. Файл Development.json.

  2. В файле создайте другой объект JSON с свойством заполнителя для CosmosDb параметров.

    {
      "OpenAi": {
        "Endpoint": "<your-azure-openai-endpoint>",
        "Key": "<your-azure-openai-key>"
      },
      "CosmosDb": {
      }
    }
    
  3. В свойстве CosmosDb создайте два новых свойства для Endpoint и Key. Используйте конечную точку Azure Cosmos DB и ключевые параметры, записанные ранее в этом проекте.

    {
      "OpenAi": {
        "Endpoint": "<your-azure-openai-endpoint>",
        "Key": "<your-azure-openai-key>"
      },
      "CosmosDb": {
        "Endpoint": "<your-azure-cosmos-db-endpoint>",
        "Key": "<your-azure-cosmos-db-key>"
      }
    }
    

    Предположим, что имя учетной записи Azure Cosmos DB — nybncrsna76fo-cosmos-nosql , а ключ — Aj2OSQqWhXfFzkITIi4MIbocWAAoBCUWnSPzHlQbDYA3TiyZCJlk8A6R1l6WqD45BxAG5vrsyQ4SCXEkPS1pLh==это, вы настроите объект JSON, как в этом примере.

    {
      "OpenAi": {
        "Endpoint": "<your-azure-openai-endpoint>",
        "Key": "<your-azure-openai-key>"
      },
      "CosmosDb": {
        "Endpoint": "https://nybncrsna76fo-cosmos-nosql.documents.azure.com:443/",
        "Key": "Aj2OSQqWhXfFzkITIi4MIbocWAAoBCUWnSPzHlQbDYA3TiyZCJlk8A6R1l6WqD45BxAG5vrsyQ4SCXEkPS1pLh=="
      }
    }
    

    Примечание.

    Ключ в этом примере вымышлен.

  4. Сохраните приложения. Файл Development.json .

Добавление обязательных элементов и экземпляра клиента

Наконец, реализуйте переменные класса и клиент, необходимые для доступа к Azure Cosmos DB для NoSQL с помощью клиента. Для этого шага используйте клиентские классы пакета SDK для реализации экземпляра типа Container в CosmosDbService классе.

  1. Откройте файл Services/CosmosDbService.cs.

  2. Добавьте директивы using для следующих пространств имен.

    • Microsoft.Azure.Cosmos

    • Microsoft.Azure.Cosmos.Fluent

    using Microsoft.Azure.Cosmos;
    using Microsoft.Azure.Cosmos.Fluent;
    
  3. CosmosDbService В классе добавьте новую Containerпеременную с типизированным именем_container.

    private readonly Container _container;
    
  4. В конструкторе добавьте ArgumentNullException.ThrowIfNullOrEmpty проверка, чтобы вызвать ошибку, если endpoint значение null или key параметры.

    ArgumentNullException.ThrowIfNullOrEmpty(endpoint);
    ArgumentNullException.ThrowIfNullOrEmpty(key);
    
  5. Теперь создайте переменную с именем options типа CosmosSerializationOptions. PropertyNamingPolicy Задайте для свойства переменной CosmosPropertyNamingPolicy.CamelCaseзначение .

    CosmosSerializationOptions options = new()
    {
        PropertyNamingPolicy = CosmosPropertyNamingPolicy.CamelCase
    };
    

    Примечание.

    Установка этого свойства гарантирует, что JSON, созданный пакетом SDK, сериализуется и десериализирован в случае верблюда независимо от того, как оно соответствует соответствующему свойству в классе .NET.

  6. Создайте новый экземпляр типа CosmosClient с именем client с помощью CosmosClientBuilder указанных ранее параметров класса, конечной точки, ключа и сериализации.

    CosmosClient client = new CosmosClientBuilder(endpoint, key)
        .WithSerializerOptions(options)
        .Build();
    
  7. Создайте новую переменную типа Database database , допускающего значение NULL, путем вызова GetDatabase метода клиентской переменной.

    Database? database = client?.GetDatabase(databaseName);
    
  8. Создайте другую переменную, допускаемую значение NULL, с именем container типа Container , вызвав GetContainer метод переменной базы данных.

    Container? container = database?.GetContainer(containerName);
    
  9. Наконец, назначьте переменную конструктора container переменной класса _container только в том случае, если он не имеет значения NULL. Если значение null, создайте ArgumentExceptionисключение .

    _container = container ??
        throw new ArgumentException("Unable to connect to existing Azure Cosmos DB container or database.");
    

    Совет

    Этот блок кода использует оператор объединения NULL для проверка если переменная имеет значение NULL перед выполнением назначения.

  10. Сохраните файл Services/CosmosDbService.cs .

Проверьте свою работу

На этом этапе конструктор должен включать достаточно логики для создания экземпляра контейнера, который использует остальная часть службы. Так как класс еще ничего не делает с контейнером, нет смысла запускать веб-приложение, но есть значение для создания приложения, чтобы убедиться, что код не имеет никаких упущений или ошибок.

  1. Откройте новый терминал.

  2. Создайте проект .NET.

    dotnet build
    
  3. Просмотрите выходные данные сборки и проверка, чтобы убедиться, что ошибки сборки отсутствуют.

    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. Закройте терминал.