Übung: Erstellen des API für NoSQL-Kontos und der zugehörigen Ressourcen
Jetzt können Sie die verschiedenen Ressourcen erstellen, z. B. Datenbanken, Container und Elemente, die Sie in Ihrem Azure Cosmos DB-Konto verwenden werden. Für diese Übung erstellen Sie eine Datenbank namens cosmicworks
mit dem einzigen Container products
. Sie müssen sicherstellen, dass der Code nicht bei dem Versuch abstürzt, einen Container erneut zu erstellen, wenn Sie diese Konsolenanwendung mehrmals ausführen.
Im Moment unterliegen Sie einigen wesentlichen Anforderungen:
- Erstellen einer Datenbank, falls sie noch nicht vorhanden ist.
- Erstellen eines Containers, falls er noch nicht vorhanden ist.
Nachdem Sie diese Übung abgeschlossen haben, erstellt Ihr Projekt alle Datenbanken oder Container, die zur Ausführung erforderlich sind.
Erstellen einer Datenbank
Das SDK enthält nützliche Methoden, die eine neue Ressource erstellen, wenn sie noch nicht vorhanden ist. Mithilfe dieser Methoden können Sie die Anwendung mehrmals ausführen, ohne sich Gedanken über Ausnahmen machen zu müssen, die von Konflikten ausgelöst werden. Hier erstellen Sie eine Datenbank.
Kehren Sie zur Datei Program.cs zurück.
Erstellen oder rufen Sie eine neue Datenbank ab, indem Sie CreateDatabaseIfNotExistsAsync(String, ThroughputProperties, RequestOptions, CancellationToken) aufrufen. Speichern Sie das Ergebnis in einer Variable namens
database
. Stellen Sie sicher, dass Sie diese Parameter festlegen:Parameter Wert id cosmicworks
Database database = await client.CreateDatabaseIfNotExistsAsync( id: "cosmicworks" );
Geben Sie den eindeutigen Bezeichner für die Datenbank aus.
Console.WriteLine($"[Database created]:\t{database.Id}");
Speichern Sie die Datei Program.cs.
Erstellen eines Containers
Hier erstellen Sie einen Container mit einem bestimmten „Segment“ (Slice) des gemeinsam genutzten Durchsatzes aus der Datenbank.
Erstellen Sie ein Eigenschaftsobjekt für einen neuen Container unter Verwendung des Typs ContainerProperties. Speichern Sie das Ergebnis in einer Variable namens
properties
. Stellen Sie sicher, dass Sie diese Parameter festlegen:Parameter Wert id products
partitionKeyPath /categoryId
ContainerProperties properties = new( id: "products", partitionKeyPath: "/categoryId" );
Erstellen Sie ein Durchsatzobjekt mit Autoskalierung mithilfe der statischen Methode CreateAutoscaleThroughput(Int32). Speichern Sie das Ergebnis in einer Variable namens
throughput
. Stellen Sie sicher, dass Sie diese Parameter festlegen:Parameter Wert autoscaleMaxThroughput 1000
var throughput = ThroughputProperties.CreateAutoscaleThroughput( autoscaleMaxThroughput: 1000 );
Erstellen oder rufen Sie einen neuen Container ab, indem Sie CreateContainerIfNotExistsAsync(String, String, Nullable<Int32>, RequestOptions, CancellationToken) aufrufen. Speichern Sie das Ergebnis in einer Variable namens
container
. Stellen Sie sicher, dass Sie diese Parameter festlegen:Container container = await database.CreateContainerIfNotExistsAsync( containerProperties: properties, throughputProperties: throughput );
Geben Sie jetzt den eindeutigen Bezeichner für den Container aus.
Console.WriteLine($"[Container created]:\t{container.Id}");
Speichern Sie die Datei Program.cs.
Erstellen von Datensatztypen für Elemente
C#-Daten können mithilfe verschiedener Typen wie Klassen, Strukturen und Datensätzen dargestellt werden. Für dieses SDK sind Datensätze nützlich, da sie standardmäßig unveränderlich sind. Sie können weiterhin Code hinzufügen, um eine geänderte Kopie eines Datensatzes zu erstellen, wenn Sie müssen. Datensätze verfügen außerdem über eine leicht lesbare Syntax und lassen sich schnell mit nur wenigen Codezeilen erstellen. In diesem Abschnitt erstellen Sie einen Basistyp für alle Elemente sowie einzelne Typen für jeden „Typ“ von Element.
Erstellen Sie in Visual Studio Code eine neue Datei mit dem Namen Item.cs. Öffnen Sie dann die Datei im Editor.
Erstellen Sie einen Basiseintragstyp namens
Item
, der die drei Eigenschaften enthält, die Sie in allen Elementen für diesen Container verwenden möchten:id
,categoryId
undtype
.public record Item( string Id, string CategoryId, string Type );
Speichern Sie die Datei Item.cs. Schließen Sie die Datei Item.cs.
Erstellen Sie eine weitere neue Datei namens Category.cs. Öffnen Sie diese Datei jetzt im Editor.
Erstellen Sie einen neuen Typ namens Category (Kategorie), der vom Typ Item (Element) erbt. Stellen Sie sicher, dass der Typ seine Werte an die Basisimplementierung übergibt, und legen Sie für die Variable type fest, dass der Name des Typs Category ausgegeben wird.
public record Category( string Id, string CategoryId ) : Item( Id, CategoryId, nameof(Category) );
Speichern Sie die Datei Category.cs. Schließen Sie die Datei Category.cs.
Erstellen Sie schließlich eine letzte Datei mit dem Namen Product.cs. Öffnen Sie diese Datei auch im Editor.
Erstellen Sie einen neuen Typ namens Product, der von Item erbt, und fügen Sie ein paar neue Eigenschaften hinzu:
name
,price
,archived
undquantity
.public record Product( string Id, string CategoryId ) : Item( Id, CategoryId, nameof(Product) ) { public string Name { get; init; } = default!; public decimal Price { get; init; } public bool Archived { get; init; } public int Quantity { get; init; } };
Speichern Sie die Datei Product.cs. Schließen Sie die Datei Product.cs.
Arbeit überprüfen
Ihre App erstellt jetzt eine Datenbank und einen Container. Die Methoden, die Sie zum Erstellen dieser Ressourcen verwendet haben, sind resilient genug, um mehrmals ausgeführt zu werden, ohne eine Ausnahme zu verursachen. Hier führen Sie die Anwendung aus und überprüfen die Ausgabe auf die eindeutigen Bezeichner beider Ressourcen.
Ausführen der .NET-Anwendung im Terminal
dotnet run
Beobachten Sie die Ausgabe der Ausführung der Anwendung. Die Ausgabe sollte dem folgenden Beispiel entsprechen:
... [Database created]: cosmicworks [Container created]: products