Упражнение. Подключение в 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.
Откройте новый терминал.
Microsoft.Azure.Cosmos
Импорт пакета из NuGet сdotnet add package
помощью .dotnet add package Microsoft.Azure.Cosmos --version 3.*
Создайте проект .NET еще раз.
dotnet build
Закройте терминал.
Добавление параметров приложения
appsettings.Development.json
Используйте файл еще раз, чтобы указать текущие значения для конечной точки и ключа Azure Cosmos DB для NoSQL.
Откройте приложения. Файл Development.json.
В файле создайте другой объект JSON с свойством заполнителя для
CosmosDb
параметров.{ "OpenAi": { "Endpoint": "<your-azure-openai-endpoint>", "Key": "<your-azure-openai-key>" }, "CosmosDb": { } }
В свойстве
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==" } }
Примечание.
Ключ в этом примере вымышлен.
Сохраните приложения. Файл Development.json .
Добавление обязательных элементов и экземпляра клиента
Наконец, реализуйте переменные класса и клиент, необходимые для доступа к Azure Cosmos DB для NoSQL с помощью клиента. Для этого шага используйте клиентские классы пакета SDK для реализации экземпляра типа Container
в CosmosDbService
классе.
Откройте файл Services/CosmosDbService.cs.
Добавьте директивы using для следующих пространств имен.
Microsoft.Azure.Cosmos
Microsoft.Azure.Cosmos.Fluent
using Microsoft.Azure.Cosmos; using Microsoft.Azure.Cosmos.Fluent;
CosmosDbService
В классе добавьте новуюContainer
переменную с типизированным именем_container
.private readonly Container _container;
В конструкторе добавьте
ArgumentNullException.ThrowIfNullOrEmpty
проверка, чтобы вызвать ошибку, еслиendpoint
значение null илиkey
параметры.ArgumentNullException.ThrowIfNullOrEmpty(endpoint); ArgumentNullException.ThrowIfNullOrEmpty(key);
Теперь создайте переменную с именем
options
типаCosmosSerializationOptions
.PropertyNamingPolicy
Задайте для свойства переменнойCosmosPropertyNamingPolicy.CamelCase
значение .CosmosSerializationOptions options = new() { PropertyNamingPolicy = CosmosPropertyNamingPolicy.CamelCase };
Примечание.
Установка этого свойства гарантирует, что JSON, созданный пакетом SDK, сериализуется и десериализирован в случае верблюда независимо от того, как оно соответствует соответствующему свойству в классе .NET.
Создайте новый экземпляр типа
CosmosClient
с именемclient
с помощьюCosmosClientBuilder
указанных ранее параметров класса, конечной точки, ключа и сериализации.CosmosClient client = new CosmosClientBuilder(endpoint, key) .WithSerializerOptions(options) .Build();
Создайте новую переменную типа
Database
database
, допускающего значение NULL, путем вызоваGetDatabase
метода клиентской переменной.Database? database = client?.GetDatabase(databaseName);
Создайте другую переменную, допускаемую значение NULL, с именем
container
типаContainer
, вызвавGetContainer
метод переменной базы данных.Container? container = database?.GetContainer(containerName);
Наконец, назначьте переменную конструктора
container
переменной класса_container
только в том случае, если он не имеет значения NULL. Если значение null, создайтеArgumentException
исключение ._container = container ?? throw new ArgumentException("Unable to connect to existing Azure Cosmos DB container or database.");
Совет
Этот блок кода использует оператор объединения NULL для проверка если переменная имеет значение NULL перед выполнением назначения.
Сохраните файл Services/CosmosDbService.cs .
Проверьте свою работу
На этом этапе конструктор должен включать достаточно логики для создания экземпляра контейнера, который использует остальная часть службы. Так как класс еще ничего не делает с контейнером, нет смысла запускать веб-приложение, но есть значение для создания приложения, чтобы убедиться, что код не имеет никаких упущений или ошибок.
Откройте новый терминал.
Создайте проект .NET.
dotnet 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
Закройте терминал.