Übung: Erstellen des API für NoSQL-Kontos und der zugehörigen Ressourcen

Abgeschlossen

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:

  1. Erstellen einer Datenbank, falls sie noch nicht vorhanden ist.
  2. Erstellen eines Containers, falls er noch nicht vorhanden ist.

Illustration of icons indicating Azure Cosmos DB resources are created in the cloud.

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.

  1. Kehren Sie zur Datei Program.cs zurück.

  2. 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"
    );
    
  3. Geben Sie den eindeutigen Bezeichner für die Datenbank aus.

    Console.WriteLine($"[Database created]:\t{database.Id}");
    
  4. 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.

  1. 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"
    );
    
  2. 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
    );
    
  3. 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
    );
    
  4. Geben Sie jetzt den eindeutigen Bezeichner für den Container aus.

    Console.WriteLine($"[Container created]:\t{container.Id}");
    
  5. 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.

  1. Erstellen Sie in Visual Studio Code eine neue Datei mit dem Namen Item.cs. Öffnen Sie dann die Datei im Editor.

  2. 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 und type.

    public record Item(
        string Id,
        string CategoryId,
        string Type
    );
    
  3. Speichern Sie die Datei Item.cs. Schließen Sie die Datei Item.cs.

  4. Erstellen Sie eine weitere neue Datei namens Category.cs. Öffnen Sie diese Datei jetzt im Editor.

  5. 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)
    );
    
  6. Speichern Sie die Datei Category.cs. Schließen Sie die Datei Category.cs.

  7. Erstellen Sie schließlich eine letzte Datei mit dem Namen Product.cs. Öffnen Sie diese Datei auch im Editor.

  8. Erstellen Sie einen neuen Typ namens Product, der von Item erbt, und fügen Sie ein paar neue Eigenschaften hinzu: name, price, archived und quantity.

    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; }
    };
    
  9. 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.

  1. Ausführen der .NET-Anwendung im Terminal

    dotnet run
    
  2. Beobachten Sie die Ausgabe der Ausführung der Anwendung. Die Ausgabe sollte dem folgenden Beispiel entsprechen:

    ...
    [Database created]:     cosmicworks
    [Container created]:    products