演習 - API for NoSQL アカウントとリソースを作成する
これで、データベース、コンテナー、項目など、Azure Cosmos DB アカウントで使用するさまざまなリソースを作成できるようになりました。 この演習では、cosmicworks
という名前のデータベースと、products
という名前のシングル コンテナーを作成します。 このコンソール アプリケーションを複数回実行する場合、コンテナーの再作成を試してもコードがクラッシュしないようにする必要があります。
ここでの重要な要件は次のとおりです。
- データベースがまだ存在しない場合は作成する
- コンテナーがまだ存在しない場合は作成する
この演習を完了すると、プロジェクトによって、実行に必要なデータベースまたはコンテナーが作成されるようになります。
データベースを作成する
リソースがない場合はリソースを新しく作成しますが、この SDK にはそのための便利なメソッドが含まれています。 これらのメソッドを使うと、競合によって発生する例外を気にすることなく、アプリケーションを何回でも実行できます。 今回はデータベースを作成します。
Program.cs ファイルに戻ります。
CreateDatabaseIfNotExistsAsync(String, ThroughputProperties, RequestOptions, CancellationToken) を呼び出して、新しいデータベースを作成または取得します。 結果を
database
という名前の変数に格納します。 次のパラメーターを必ず設定してください。パラメーター 値 id cosmicworks
Database database = await client.CreateDatabaseIfNotExistsAsync( id: "cosmicworks" );
データベースの一意識別子を出力します。
Console.WriteLine($"[Database created]:\t{database.Id}");
Program.cs ファイルを保存します。
コンテナーを作成する
ここで、データベースから共有スループットの特定の "スライス" を使用してコンテナーを作成します。
ContainerProperties 型を使用して、新しいコンテナーのプロパティ オブジェクトを作成します。 結果を
properties
という名前の変数に格納します。 次のパラメーターを必ず設定してください。パラメーター 値 id products
partitionKeyPath /categoryId
ContainerProperties properties = new( id: "products", partitionKeyPath: "/categoryId" );
静的メソッド CreateAutoscaleThroughput(Int32) を使用して自動スケーリング スループット オブジェクトを作成します。 結果を
throughput
という名前の変数に格納します。 次のパラメーターを必ず設定してください。パラメーター 値 autoscaleMaxThroughput 1000
var throughput = ThroughputProperties.CreateAutoscaleThroughput( autoscaleMaxThroughput: 1000 );
CreateContainerIfNotExistsAsync(String, String, Nullable<Int32>, RequestOptions, CancellationToken) を呼び出して、新しいコンテナーを作成または取得します。 結果を
container
という名前の変数に格納します。 次のパラメーターを必ず設定してください。Container container = await database.CreateContainerIfNotExistsAsync( containerProperties: properties, throughputProperties: throughput );
次に、コンテナーの一意識別子を出力します。
Console.WriteLine($"[Container created]:\t{container.Id}");
Program.cs ファイルを保存します。
項目のレコード型を作成する
C# のデータは、クラス、構造体、レコードなど、さまざまな型を使って表すことができます。 この SDK では、既定では変更できないレコードが役に立ちます。 それでも、必要であれば、レコードの変更されたコピーを作成するコードを追加できます。 また、レコードの構文は読みやすく、わずか数行のコードで簡単に作成できます。 このセクションでは、すべての項目に対する基本データ型と項目の "種類" ごとの個別の型を作成します。
Visual Studio Code を使用し、Item.cs という名前の新しいファイルを作成します。 次に、エディターでファイルを開きます。
このコンテナーのすべての項目で使用する、3 つのプロパティ (
id
、categoryId
、type
) を含むItem
という名前の基本レコード型を作成します。public record Item( string Id, string CategoryId, string Type );
Item.cs ファイルを保存します。 Item.cs ファイルを閉じます。
Category.cs という名前のファイルを別に新規作成します。 エディターでこのファイルを開きます。
Item 型を継承する Category という名前の新しい型を作成します。 型によってその値が基本実装に渡されることを確認し、Category 型の名前を出力するように type 変数を設定します。
public record Category( string Id, string CategoryId ) : Item( Id, CategoryId, nameof(Category) );
Category.cs ファイルを保存します。 Category.cs ファイルを閉じます。
最後に、Product.cs という名前の最後のファイルを 1 つ作成します。 このファイルもコード エディターで開きます。
Item を継承する Product という名前の新しい型を作成し、いくつかの新しいプロパティ (
name
、price
、archived
、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; } };
Product.cs ファイルを保存します。 Product.cs ファイルを閉じます。
作業を確認
アプリによってデータベースとコンテナーが作成されるようになりました。 これらのリソースの作成に使ったメソッドは十分な回復性があり、複数回実行しても例外は発生しません。 ここでは、アプリケーションを実行し、両方のリソースの一意の識別子の出力を調べます。
ターミナルで .NET アプリケーションを実行する
dotnet run
アプリケーションを実行した出力を確認します。 出力は、次の例と一致しているはずです。
... [Database created]: cosmicworks [Container created]: products