Quickstart: Azure Cosmos DB for NoSQL-clientbibliotheek voor .NET
VAN TOEPASSING OP: NoSQL
Ga aan de slag met de Azure Cosmos DB-clientbibliotheek voor .NET om databases, containers en items in uw account te maken. Volg deze stappen om het pakket te installeren en voorbeeldcode voor basistaken uit te proberen.
Notitie
De voorbeeldcodefragmenten zijn beschikbaar op GitHub als een .NET-project.
API-referentiedocumentatie | Broncode van bibliotheek | Pakket (NuGet) | Samples
Vereisten
- Een Azure-account met een actief abonnement.
- Geen Azure-abonnement? U kunt Azure Cosmos DB gratis uitproberen zonder dat u een creditcard nodig hebt.
- .NET 6.0 of hoger
- Azure Command-Line Interface (CLI) of Azure PowerShell
Controle van vereisten
- Voer in een terminal of opdrachtvenster uit
dotnet --version
om te controleren of de .NET SDK versie 6.0 of hoger is. - Voer
az --version
(Azure CLI) ofGet-Module -ListAvailable AzureRM
(Azure PowerShell) uit om te controleren of u de juiste Azure-opdrachtregelprogramma's hebt geïnstalleerd.
Instellen
In deze sectie wordt u begeleid bij het maken van een Azure Cosmos DB-account en het instellen van een project dat gebruikmaakt van de Azure Cosmos DB for NoSQL-clientbibliotheek voor .NET om resources te beheren.
Maak een Azure Cosmos DB-account
Tip
Geen Azure-abonnement? U kunt Azure Cosmos DB gratis uitproberen zonder dat u een creditcard nodig hebt. Als u een account maakt met behulp van de gratis proefversie, kunt u veilig doorgaan naar de sectie Een nieuwe .NET-app maken .
In deze quickstart wordt één Azure Cosmos DB-account gemaakt met behulp van de API voor NoSQL.
Tip
Voor deze quickstart raden we u aan de naam msdocs-cosmos-quickstart-rg
van de resourcegroep te gebruiken.
Meld u aan bij de Azure-portal.
Selecteer vanuit het menu van Azure Portal of op de startpagina de optie Een resource maken.
Zoek op de pagina Nieuw naar Azure Cosmos DB en selecteer dit.
Selecteer op de pagina API-optie selecteren de optie Maken in de sectie NoSQL . Azure Cosmos DB heeft zes API's: NoSQL, MongoDB, PostgreSQL, Apache Cassandra, Apache Gremlin en Table. Meer informatie over de API voor NoSQL.
Voer op de pagina Azure Cosmos DB-account maken de volgende gegevens in:
Instelling Waarde Beschrijving Abonnement Abonnementsnaam Selecteer het Azure-abonnement dat u wilt gebruiken voor dit Azure Cosmos-account. Resourcegroep Naam van de resourcegroep Selecteer een resourcegroep of selecteer Nieuwe maken en voer vervolgens een unieke naam in voor de nieuwe resourcegroep. Accountnaam Een unieke naam Voer een naam in om uw Azure Cosmos-account te identificeren. De naam wordt gebruikt als onderdeel van een FQDN (Fully Qualified Domain Name) met het achtervoegsel documents.azure.com, dus de naam moet wereldwijd uniek zijn. De naam mag alleen kleine letters, cijfers en het koppelteken (-) bevatten. De naam moet ook tussen de 3 en 44 tekens lang zijn. Locatie De regio het dichtst bij uw gebruikers Selecteer een geografische locatie waar u het Azure Cosmos DB-account wilt hosten. Gebruik de locatie die zich het dichtst bij uw gebruikers bevindt, zodat ze de snelst mogelijke toegang tot de gegevens hebben. Capaciteitsmodus Ingerichte doorvoer of serverloos Selecteer Ingerichte doorvoer om een account te maken in de modus Ingerichte doorvoer. Selecteer Serverloos om een account te maken in de modus serverloos. Niveaukorting op gratis laag van Azure Cosmos DB toepassen Toepassen of niet toepassen Schakel de gratis laag van Azure Cosmos DB in. Met de gratis laag van Azure Cosmos DB krijgt u de eerste 1000 RU/s en 25 GB gratis opslagruimte in een account. Meer informatie over de gratis laag. Notitie
U kunt per Azure-abonnement maximaal één gratis laag voor het Azure Cosmos DB-account hebben, en u moet zich aanmelden wanneer u het account maakt. Als u de optie voor het toepassen van de korting voor gratis lagen niet ziet, betekent dit dat er al een ander account in het abonnement is ingeschakeld met een gratis laag.
Selecteer Controleren + maken.
Controleer de instellingen die u opgeeft en selecteer vervolgens Maken. Het duurt een paar minuten om het account te maken. Wacht totdat op de portalpagina Uw implementatie is voltooid wordt weergegeven voordat u verdergaat.
Selecteer Ga naar resource om naar de Azure Cosmos DB-accountpagina te gaan.
Selecteer op de pagina API for NoSQL-account de optie Navigatiemenu Sleutels .
Noteer de waarden uit de velden URI en PRIMAIRE SLEUTEL . U gebruikt deze waarden in een latere stap.
Een nieuwe .NET-app maken
Maak een nieuwe .NET-toepassing in een lege map met behulp van de terminal van uw voorkeur. Gebruik de dotnet new
opdracht om de consolesjabloon op te geven.
dotnet new console
Het pakket installeren
Voeg het NuGet-pakket Microsoft.Azure.Cosmos toe aan het .NET-project. Gebruik de dotnet add package
opdracht om de naam van het NuGet-pakket op te geven.
dotnet add package Microsoft.Azure.Cosmos
Bouw het project met de dotnet build
opdracht .
dotnet build
Zorg ervoor dat de build is geslaagd zonder fouten. De verwachte uitvoer van de build moet er ongeveer als volgt uitzien:
Determining projects to restore...
All projects are up-to-date for restore.
dslkajfjlksd -> C:\Users\sidandrews\Demos\dslkajfjlksd\bin\Debug\net6.0\dslkajfjlksd.dll
Build succeeded.
0 Warning(s)
0 Error(s)
Omgevingsvariabelen configureren
Als u de waarden URI en PRIMAIRE SLEUTEL in uw code wilt gebruiken, bewaart u deze in nieuwe omgevingsvariabelen op de lokale computer waarop de toepassing wordt uitgevoerd. Als u de omgevingsvariabele wilt instellen, gebruikt u de terminal van uw voorkeur om de volgende opdrachten uit te voeren:
$env:COSMOS_ENDPOINT = "<cosmos-account-URI>"
$env:COSMOS_KEY = "<cosmos-account-PRIMARY-KEY>"
Objectmodel
Voordat u begint met het bouwen van de toepassing, bekijken we de hiërarchie van resources in Azure Cosmos DB. Azure Cosmos DB heeft een specifiek objectmodel dat wordt gebruikt voor het maken en openen van resources. Azure Cosmos DB maakt resources in een hiërarchie die bestaat uit accounts, databases, containers en items.
Hiërarchisch diagram met bovenaan een Azure Cosmos DB-account. Het account heeft twee onderliggende databaseknooppunten. Een van de databaseknooppunten bevat twee onderliggende containerknooppunten. Het andere databaseknooppunt bevat één onderliggend containerknooppunt. Dat ene containerknooppunt heeft drie onderliggende itemknooppunten.
Zie Werken met databases, containers en items in Azure Cosmos DB voor meer informatie over de hiërarchie van verschillende resources.
U gebruikt de volgende .NET-klassen om te communiceren met deze resources:
CosmosClient
- Deze klasse biedt een logische weergave aan de clientzijde voor de Azure Cosmos DB-service. Het clientobject wordt gebruikt om aanvragen aan de service te configureren en uitvoeren.Database
- Deze klasse is een verwijzing naar een database die al dan niet bestaat in de service. De database wordt aan de serverzijde gevalideerd wanneer u deze probeert te openen of er een bewerking op uitvoert.Container
- Deze klasse is een verwijzing naar een container die mogelijk nog niet bestaat in de service. De container wordt aan de serverzijde gevalideerd wanneer u ermee probeert te werken.QueryDefinition
- Deze klasse vertegenwoordigt een SQL-query en eventuele queryparameters.FeedIterator<>
- Deze klasse vertegenwoordigt een iterator die de huidige pagina met resultaten kan volgen en een nieuwe pagina met resultaten kan ophalen.FeedResponse<>
- Deze klasse vertegenwoordigt één pagina met antwoorden van de iterator. Dit type kan worden herhaald met behulp van eenforeach
lus.
Codevoorbeelden
- De client verifiëren
- Een database maken
- Een container maken
- Een item maken
- Een item ophalen
- Query-items
Met de voorbeeldcode die in dit artikel wordt beschreven, wordt een database met de naam cosmicworks
gemaakt met een container met de naam products
. De products
tabel is ontworpen om productgegevens te bevatten, zoals naam, categorie, hoeveelheid en een verkoopindicator. Elk product bevat ook een unieke id.
Voor deze voorbeeldcode gebruikt de container de categorie als logische partitiesleutel.
De client verifiëren
Toepassingsaanvragen voor de meeste Azure-services moeten worden geautoriseerd. Het gebruik van de DefaultAzureCredential
klasse van de Azure Identity-clientbibliotheek is de aanbevolen methode voor het implementeren van wachtwoordloze verbindingen met Azure-services in uw code.
U kunt aanvragen voor Azure-services ook rechtstreeks autoriseren met behulp van wachtwoorden, verbindingsreeksen of andere referenties. Deze aanpak moet echter met de nodige voorzichtigheid worden gebruikt. Ontwikkelaars moeten ijverig zijn om deze geheimen nooit beschikbaar te maken op een onbeveiligde locatie. Iedereen die toegang krijgt tot het wachtwoord of de geheime sleutel, kan zich verifiëren. DefaultAzureCredential
biedt verbeterde beheer- en beveiligingsvoordelen ten opzichte van de accountsleutel om verificatie zonder wachtwoord toe te staan. Beide opties worden in het volgende voorbeeld gedemonstreerd.
DefaultAzureCredential
is een klasse die wordt geleverd door de Azure Identity-clientbibliotheek voor .NET. Zie het Overzicht van DefaultAzureCredential voor meer informatie overDefaultAzureCredential
. DefaultAzureCredential
ondersteunt meerdere verificatiemethoden en bepaalt welke methode tijdens runtime moet worden gebruikt. Met deze aanpak kan uw app verschillende verificatiemethoden gebruiken in verschillende omgevingen (lokaal versus productie) zonder omgevingsspecifieke code te implementeren.
Uw app kan bijvoorbeeld verifiëren met behulp van uw Visual Studio-aanmeldingsreferenties bij het lokaal ontwikkelen en vervolgens een beheerde identiteit gebruiken zodra deze in Azure is geïmplementeerd. Er zijn geen codewijzigingen vereist voor deze overgang.
Wanneer u lokaal ontwikkelt met verificatie zonder wachtwoord, moet u ervoor zorgen dat aan het gebruikersaccount dat verbinding maakt met Cosmos DB, een rol is toegewezen met de juiste machtigingen om gegevensbewerkingen uit te voeren. Momenteel bevat Azure Cosmos DB voor NoSQL geen ingebouwde rollen voor gegevensbewerkingen, maar u kunt uw eigen rollen maken met behulp van de Azure CLI of PowerShell.
Rollen bestaan uit een verzameling machtigingen of acties die een gebruiker mag uitvoeren, zoals lezen, schrijven en verwijderen. Meer informatie over het configureren van op rollen gebaseerd toegangsbeheer (RBAC) vindt u in de cosmos-beveiligingsconfiguratiedocumentatie.
De aangepaste rol maken
Maak rollen met behulp van de az role definition create
opdracht . Geef de naam en resourcegroep van het Cosmos DB-account door, gevolgd door een JSON-hoofdtekst die de aangepaste rol definieert. In het volgende voorbeeld wordt een rol met de naam gemaakt PasswordlessReadWrite
met machtigingen voor het lezen en schrijven van items in Cosmos DB-containers. De rol is ook gericht op het accountniveau met behulp van /
.
az cosmosdb sql role definition create
--account-name passwordlessnosql
--resource-group passwordlesstesting
--body '{
"RoleName": "PasswordlessReadWrite",
"Type": "CustomRole",
"AssignableScopes": ["/"],
"Permissions": [{
"DataActions": [
"Microsoft.DocumentDB/databaseAccounts/readMetadata",
"Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*",
"Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*"
]
}]
}'
Wanneer de opdracht is voltooid, kopieert u de id-waarde uit het name
veld en plakt u deze ergens voor later gebruik.
Wijs vervolgens de rol toe die u hebt gemaakt aan het gebruikersaccount of de service-principal die verbinding maakt met Cosmos DB. Tijdens de lokale ontwikkeling is dit over het algemeen uw eigen account dat is aangemeld bij Visual Studio of de Azure CLI.
Haal de details van uw account op met behulp van de az ad user
opdracht .
az ad user show --id "<your-email-address>"
Kopieer de waarde van de id
eigenschap uit de resultaten en plak deze ergens voor later gebruik.
Wijs ten slotte de aangepaste rol toe die u hebt gemaakt aan uw gebruikersaccount met behulp van de az cosmosdb sql role assignment create
opdracht en de id's die u eerder hebt gekopieerd.
az cosmosdb sql role assignment create
--account-name passwordlessnosql
--resource-group passwordlesstesting
--scope "/"
--principal-id <your-user-id>
--role-definition-id <your-custom-role-id>
Verifiëren met DefaultAzureCredential
Zorg ervoor dat u bent geverifieerd met hetzelfde Azure AD account waaraan u de rol hebt toegewezen. U kunt zich verifiëren via de Azure CLI, Visual Studio of Azure PowerShell.
Meld u aan bij Azure via de Azure CLI met behulp van de volgende opdracht:
az login
U kunt zich verifiëren bij Cosmos DB for NoSQL door DefaultAzureCredential
het Azure.Identity
NuGet-pakket toe te voegen aan uw toepassing. DefaultAzureCredential
detecteert en gebruikt automatisch het account waarmee u zich in de vorige stap hebt aangemeld.
dotnet add package Azure.Identity
Open het bestand vanuit de Program.cs
projectmap. Voeg in de editor using-instructies toe voor de Microsoft.Azure.Cosmos
naamruimten en Azure.Identity
.
using Microsoft.Azure.Cosmos;
using Azure.Identity;
Definieer een nieuw exemplaar van de CosmosClient
klasse met behulp van de constructor en Environment.GetEnvironmentVariable
lees de COSMOS_ENDPOINT
omgevingsvariabele die u eerder hebt gemaakt.
// New instance of CosmosClient class
using CosmosClient client = new(
accountEndpoint: Environment.GetEnvironmentVariable("COSMOS_ENDPOINT"),
tokenCredential: new DefaultAzureCredential()
);
Zie Aan de slag met Azure Cosmos DB voor NoSQL en .NET voor meer informatie over verschillende manieren om een CosmosClient
exemplaar te maken.
De database maken en er query's op uitvoeren
Vervolgens maakt u een database en container om producten op te slaan en voert u query's uit om deze items in te voegen en te lezen.
Met de Microsoft.Azure.Cosmos
clientbibliotheken kunt u gegevensbewerkingen uitvoeren met behulp van Azure RBAC. Als u echter beheerbewerkingen wilt verifiëren, zoals het maken en verwijderen van databases, moet u RBAC gebruiken via een van de volgende opties:
In dit voorbeeld wordt de Azure CLI-benadering gebruikt. Gebruik de az cosmosdb sql database create
opdrachten en az cosmosdb sql container create
om een Cosmos DB NoSQL-database en -container te maken.
# Create a SQL API database
az cosmosdb sql database create
--account-name msdocs-cosmos-nosql
--resource-group msdocs
--name cosmicworks
# Create a SQL API container
az cosmosdb sql container create
--account-name msdocs-cosmos-nosql
--resource-group msdocs
--database-name cosmicworks
--name products
Nadat de resources zijn gemaakt, gebruikt u klassen uit de Microsoft.Azure.Cosmos
clientbibliotheken om verbinding te maken met en query's uit te voeren op de database.
De database ophalen
Gebruik de CosmosClient.GetDatabase
methode retourneert een verwijzing naar de opgegeven database.
// Database reference with creation if it does not already exist
Database database = client.GetDatabase(id: "cosmicworks");
Console.WriteLine($"New database:\t{database.Id}");
De container ophalen
De Database.GetContainer
retourneert een verwijzing naar de opgegeven container.
// Container reference with creation if it does not alredy exist
Container container = database.GetContainer(id: "products");
Console.WriteLine($"New container:\t{container.Id}");
Een item maken
De eenvoudigste manier om een nieuw item in een container te maken, is door eerst een C#- klasse of recordtype te maken met alle leden die u wilt serialiseren in JSON. In dit voorbeeld heeft de C#-record een unieke id, een categoryId-veld voor de partitiesleutel en extra categoryName-, naam-, hoeveelheid- en verkoopvelden .
// C# record representing an item in the container
public record Product(
string id,
string categoryId,
string categoryName,
string name,
int quantity,
bool sale
);
Maak een item in de container door aan te roepen Container.CreateItemAsync
.
// Create new object and upsert (create or replace) to container
Product newItem = new(
id: "70b63682-b93a-4c77-aad2-65501347265f",
categoryId: "61dba35b-4f02-45c5-b648-c6badc0cbd79",
categoryName: "gear-surf-surfboards",
name: "Yamba Surfboard",
quantity: 12,
sale: false
);
Product createdItem = await container.CreateItemAsync<Product>(
item: newItem,
partitionKey: new PartitionKey("61dba35b-4f02-45c5-b648-c6badc0cbd79")
);
Console.WriteLine($"Created item:\t{createdItem.id}\t[{createdItem.categoryName}]");
Zie Een item maken in Azure Cosmos DB voor NoSQL met behulp van .NET voor meer informatie over het maken, uitvoeren of vervangen van items.
Een item ophalen
In Azure Cosmos DB kunt u een puntleesbewerking uitvoeren met behulp van zowel de unieke id (id
) als de partitiesleutelvelden. Roep Container.ReadItemAsync<>
in de SDK het doorgeven van beide waarden aan om een gedeserialiseerd exemplaar van uw C#-type te retourneren.
// Point read item from container using the id and partitionKey
Product readItem = await container.ReadItemAsync<Product>(
id: "70b63682-b93a-4c77-aad2-65501347265f",
partitionKey: new PartitionKey("61dba35b-4f02-45c5-b648-c6badc0cbd79")
);
Zie Een item lezen in Azure Cosmos DB voor NoSQL met behulp van .NET voor meer informatie over het lezen van items en het parseren van het antwoord.
Query-items
Nadat u een item hebt ingevoegd, kunt u een query uitvoeren om alle items op te halen die overeenkomen met een specifiek filter. In dit voorbeeld wordt de SQL-query uitgevoerd: SELECT * FROM products p WHERE p.categoryId = "61dba35b-4f02-45c5-b648-c6badc0cbd79"
. In dit voorbeeld wordt het type QueryDefinition en een query-expressie met parameters gebruikt voor het partitiesleutelfilter. Zodra de query is gedefinieerd, roept u Container.GetItemQueryIterator<>
aan om een resultaat-iterator op te halen die de pagina's met resultaten beheert. Gebruik vervolgens een combinatie van while
en-lussen foreach
om pagina's met resultaten op te halen en herhaal vervolgens de afzonderlijke items.
// Create query using a SQL string and parameters
var query = new QueryDefinition(
query: "SELECT * FROM products p WHERE p.categoryId = @categoryId"
)
.WithParameter("@categoryId", "61dba35b-4f02-45c5-b648-c6badc0cbd79");
using FeedIterator<Product> feed = container.GetItemQueryIterator<Product>(
queryDefinition: query
);
while (feed.HasMoreResults)
{
FeedResponse<Product> response = await feed.ReadNextAsync();
foreach (Product item in response)
{
Console.WriteLine($"Found item:\t{item.name}");
}
}
De code uitvoeren
Met deze app maakt u een API voor Een NoSQL-database en -container. In het voorbeeld wordt vervolgens een item gemaakt en wordt exact hetzelfde item teruggelezen. Ten slotte geeft het voorbeeld een query uit die alleen dat ene item mag retourneren. Bij elke stap voert het voorbeeld metagegevens uit naar de console over de stappen die zijn uitgevoerd.
Als u de app wilt uitvoeren, gebruikt u een terminal om naar de toepassingsmap te navigeren en de toepassing uit te voeren.
dotnet run
De uitvoer van de app moet er ongeveer uitzien als in dit voorbeeld:
New database: adventureworks
New container: products
Created item: 68719518391 [gear-surf-surfboards]
Resources opschonen
Wanneer u de API voor NoSQL-account niet meer nodig hebt, kunt u de bijbehorende resourcegroep verwijderen.
Navigeer naar de resourcegroep die u eerder hebt gemaakt in de Azure Portal.
Tip
In deze quickstart hebben we de naam
msdocs-cosmos-quickstart-rg
aanbevolen.Selecteer Resourcegroep verwijderen.
Voer in het dialoogvenster Weet u zeker dat u wilt verwijderen de naam van de resourcegroep in en selecteer vervolgens Verwijderen.
Volgende stappen
In deze quickstart hebt u geleerd hoe u een Azure Cosmos DB voor NoSQL-account maakt, een database maakt en een container maakt met behulp van de .NET SDK. U kunt nu dieper ingaan op een zelfstudie waarin u uw Azure Cosmos DB voor NoSQL-resources en -gegevens beheert met behulp van een .NET-consoletoepassing.