演習 - API for NoSQL アカウントとリソースを作成する

完了

これで、データベース、コンテナー、項目など、Azure Cosmos DB アカウントで使用するさまざまなリソースを作成できるようになりました。 この演習では、cosmicworks という名前のデータベースと、products という名前のシングル コンテナーを作成します。 このコンソール アプリケーションを複数回実行する場合、コンテナーの再作成を試してもコードがクラッシュしないようにする必要があります。

ここでの重要な要件は次のとおりです。

  1. データベースがまだ存在しない場合は作成する
  2. コンテナーがまだ存在しない場合は作成する

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

この演習を完了すると、プロジェクトによって、実行に必要なデータベースまたはコンテナーが作成されるようになります。

データベースを作成する

リソースがない場合はリソースを新しく作成しますが、この SDK にはそのための便利なメソッドが含まれています。 これらのメソッドを使うと、競合によって発生する例外を気にすることなく、アプリケーションを何回でも実行できます。 今回はデータベースを作成します。

  1. Program.cs ファイルに戻ります。

  2. CreateDatabaseIfNotExistsAsync(String, ThroughputProperties, RequestOptions, CancellationToken) を呼び出して、新しいデータベースを作成または取得します。 結果を database という名前の変数に格納します。 次のパラメーターを必ず設定してください。

    パラメーター
    id cosmicworks
    Database database = await client.CreateDatabaseIfNotExistsAsync(
        id: "cosmicworks"
    );
    
  3. データベースの一意識別子を出力します。

    Console.WriteLine($"[Database created]:\t{database.Id}");
    
  4. Program.cs ファイルを保存します。

コンテナーを作成する

ここで、データベースから共有スループットの特定の "スライス" を使用してコンテナーを作成します。

  1. ContainerProperties 型を使用して、新しいコンテナーのプロパティ オブジェクトを作成します。 結果を properties という名前の変数に格納します。 次のパラメーターを必ず設定してください。

    パラメーター
    id products
    partitionKeyPath /categoryId
    ContainerProperties properties = new(
        id: "products",
        partitionKeyPath: "/categoryId"
    );
    
  2. 静的メソッド CreateAutoscaleThroughput(Int32) を使用して自動スケーリング スループット オブジェクトを作成します。 結果を throughput という名前の変数に格納します。 次のパラメーターを必ず設定してください。

    パラメーター
    autoscaleMaxThroughput 1000
    var throughput = ThroughputProperties.CreateAutoscaleThroughput(
        autoscaleMaxThroughput: 1000
    );
    
  3. CreateContainerIfNotExistsAsync(String, String, Nullable<Int32>, RequestOptions, CancellationToken) を呼び出して、新しいコンテナーを作成または取得します。 結果を container という名前の変数に格納します。 次のパラメーターを必ず設定してください。

    Container container = await database.CreateContainerIfNotExistsAsync(
        containerProperties: properties,
        throughputProperties: throughput
    );
    
  4. 次に、コンテナーの一意識別子を出力します。

    Console.WriteLine($"[Container created]:\t{container.Id}");
    
  5. Program.cs ファイルを保存します。

項目のレコード型を作成する

C# のデータは、クラス、構造体、レコードなど、さまざまな型を使って表すことができます。 この SDK では、既定では変更できないレコードが役に立ちます。 それでも、必要であれば、レコードの変更されたコピーを作成するコードを追加できます。 また、レコードの構文は読みやすく、わずか数行のコードで簡単に作成できます。 このセクションでは、すべての項目に対する基本データ型と項目の "種類" ごとの個別の型を作成します。

  1. Visual Studio Code を使用し、Item.cs という名前の新しいファイルを作成します。 次に、エディターでファイルを開きます。

  2. このコンテナーのすべての項目で使用する、3 つのプロパティ (idcategoryIdtype) を含む Item という名前の基本レコード型を作成します。

    public record Item(
        string Id,
        string CategoryId,
        string Type
    );
    
  3. Item.cs ファイルを保存します。 Item.cs ファイルを閉じます。

  4. Category.cs という名前のファイルを別に新規作成します。 エディターでこのファイルを開きます。

  5. Item 型を継承する Category という名前の新しい型を作成します。 型によってその値が基本実装に渡されることを確認し、Category 型の名前を出力するように type 変数を設定します。

    public record Category(
        string Id,
        string CategoryId
    ) : Item(
        Id,
        CategoryId,
        nameof(Category)
    );
    
  6. Category.cs ファイルを保存します。 Category.cs ファイルを閉じます。

  7. 最後に、Product.cs という名前の最後のファイルを 1 つ作成します。 このファイルもコード エディターで開きます。

  8. Item を継承する Product という名前の新しい型を作成し、いくつかの新しいプロパティ (namepricearchivedquantity) を追加します。

    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. Product.cs ファイルを保存します。 Product.cs ファイルを閉じます。

作業を確認

アプリによってデータベースとコンテナーが作成されるようになりました。 これらのリソースの作成に使ったメソッドは十分な回復性があり、複数回実行しても例外は発生しません。 ここでは、アプリケーションを実行し、両方のリソースの一意の識別子の出力を調べます。

  1. ターミナルで .NET アプリケーションを実行する

    dotnet run
    
  2. アプリケーションを実行した出力を確認します。 出力は、次の例と一致しているはずです。

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