Cvičení – Připojení do Azure Cosmos DB for NoSQL
Třída CosmosDbService
obsahuje implementaci zástupných procedur služby podobné OpenAiService
třídě, na které jste dříve pracovali v tomto modulu. Naproti tomu tato třída používá sadu .NET SDK pro službu Azure Cosmos DB, která se mírně liší.
V tomto cvičení je potřeba splnit několik klíčových požadavků:
- Import sady .NET SDK pro Azure Cosmos DB pro NoSQL
- Přidání koncového bodu a klíče služby Azure Cosmos DB for NoSQL do nastavení aplikace
- Úprava třídy služby s různými členy a instancí klienta
Import sady .NET SDK
Balíček Microsoft.Azure.Cosmos
NuGet je typová knihovna, která zjednodušuje proces přístupu ke službě Azure Cosmos DB for NoSQL z aplikace .NET.
Otevřete nový terminál.
Importujte
Microsoft.Azure.Cosmos
balíček z NuGetu pomocídotnet add package
.dotnet add package Microsoft.Azure.Cosmos --version 3.*
Vytvořte projekt .NET ještě jednou.
dotnet build
Zavřete terminál.
Přidání nastavení aplikace
Znovu použijte appsettings.Development.json
soubor k zadání aktuálních hodnot pro koncový bod a klíč Azure Cosmos DB for NoSQL.
Otevřete nastavení aplikace. Soubor Development.json.
V souboru vytvořte další nový objekt JSON se zástupnou vlastností pro
CosmosDb
nastavení.{ "OpenAi": { "Endpoint": "<your-azure-openai-endpoint>", "Key": "<your-azure-openai-key>" }, "CosmosDb": { } }
V rámci
CosmosDb
vlastnosti vytvořte dvě nové vlastnosti pro objektEndpoint
aKey
. Použijte nastavení koncového bodu a klíče služby Azure Cosmos DB, které jste si poznamenali dříve v tomto projektu.{ "OpenAi": { "Endpoint": "<your-azure-openai-endpoint>", "Key": "<your-azure-openai-key>" }, "CosmosDb": { "Endpoint": "<your-azure-cosmos-db-endpoint>", "Key": "<your-azure-cosmos-db-key>" } }
Za předpokladu, že název účtu služby Azure Cosmos DB je nybncrsna76fo-cosmos-nosql a klíč je
Aj2OSQqWhXfFzkITIi4MIbocWAAoBCUWnSPzHlQbDYA3TiyZCJlk8A6R1l6WqD45BxAG5vrsyQ4SCXEkPS1pLh==
, nakonfigurujete objekt JSON jako v tomto příkladu.{ "OpenAi": { "Endpoint": "<your-azure-openai-endpoint>", "Key": "<your-azure-openai-key>" }, "CosmosDb": { "Endpoint": "https://nybncrsna76fo-cosmos-nosql.documents.azure.com:443/", "Key": "Aj2OSQqWhXfFzkITIi4MIbocWAAoBCUWnSPzHlQbDYA3TiyZCJlk8A6R1l6WqD45BxAG5vrsyQ4SCXEkPS1pLh==" } }
Poznámka:
Klíč v tomto příkladu je fiktivní.
Uložte nastavení aplikace. Soubor Development.json.
Přidání požadovaných členů a instance klienta
Nakonec implementujte proměnné třídy a klienta potřebné pro přístup ke službě Azure Cosmos DB for NoSQL pomocí klienta. V tomto kroku použijte klientské třídy sady SDK k implementaci instance typu Container
ve CosmosDbService
třídě.
Otevřete soubor Services/CosmosDbService.cs.
Přidejte direktivy using pro následující obory názvů.
Microsoft.Azure.Cosmos
Microsoft.Azure.Cosmos.Fluent
using Microsoft.Azure.Cosmos; using Microsoft.Azure.Cosmos.Fluent;
V rámci
CosmosDbService
třídy přidejte novouContainer
proměnnou -typed s názvem_container
.private readonly Container _container;
V rámci konstruktoru přidejte
ArgumentNullException.ThrowIfNullOrEmpty
kontroly pro vyvolání chyby, pokud jsouendpoint
key
parametry null.ArgumentNullException.ThrowIfNullOrEmpty(endpoint); ArgumentNullException.ThrowIfNullOrEmpty(key);
Nyní vytvořte proměnnou s názvem
options
typuCosmosSerializationOptions
.PropertyNamingPolicy
Nastavte vlastnost proměnné naCosmosPropertyNamingPolicy.CamelCase
hodnotu .CosmosSerializationOptions options = new() { PropertyNamingPolicy = CosmosPropertyNamingPolicy.CamelCase };
Poznámka:
Nastavením této vlastnosti zajistíte, že json vytvořený sadou SDK je serializován i deserializován v případě camel bez ohledu na to, jak je odpovídající vlastnost cased ve třídě .NET.
Vytvořte novou instanci typu
CosmosClient
pojmenovanouclient
pomocíCosmosClientBuilder
možností třídy, koncového bodu, klíče a serializace, které jste zadali dříve.CosmosClient client = new CosmosClientBuilder(endpoint, key) .WithSerializerOptions(options) .Build();
Vytvořte novou proměnnou s možnou hodnotou null typu
Database
pojmenovanoudatabase
volánímGetDatabase
metody klientské proměnné.Database? database = client?.GetDatabase(databaseName);
Vytvořte další proměnnou s možnou hodnotou null s názvem
container
typuContainer
volánímGetContainer
metody databázové proměnné.Container? container = database?.GetContainer(containerName);
Nakonec přiřaďte proměnnou konstruktoru
container
proměnné třídy_container
pouze v případě, že není null. Pokud má hodnotu null, vyvoláte výjimkuArgumentException
._container = container ?? throw new ArgumentException("Unable to connect to existing Azure Cosmos DB container or database.");
Tip
Tento blok kódu používá operátor nulového sjednocení ke kontrole, jestli je proměnná před provedením přiřazení null.
Uložte soubor Services/CosmosDbService.cs.
Kontrola práce
V tomto okamžiku by měl konstruktor obsahovat dostatečnou logiku k vytvoření instance kontejneru, kterou používá zbytek služby. Vzhledem k tomu, že třída ještě s kontejnerem nic nedělá, neexistuje žádný bod ve spuštění webové aplikace, ale při sestavování aplikace je hodnota, aby se zajistilo, že váš kód nemá žádné vynechání ani chyby.
Otevřete nový terminál.
Sestavte projekt .NET.
dotnet build
Prohlédněte si výstup sestavení a zkontrolujte, jestli nedošlo k žádným chybám sestavení.
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
Zavřete terminál.