Azure Cosmos DB 用 Microsoft .NET SDK v3 を探索する
このユニットでは、API for NoSQL 用の Azure Cosmos DB .NET SDK v3 に焦点を当てます。 (Microsoft.Azure.Cosmos NuGet package.)以前のバージョンの .NET SDK の知識があるのであれば、コレクションやドキュメントという単語になじみがあるかもしれません。
azure-cosmos-dotnet-v3 GitHub リポジトリには、最新の .NET サンプル ソリューションがあります。 これらのソリューションを使用して、Azure Cosmos DB リソースに対する CRUD (作成、読み取り、更新、および削除) などの一般的な操作を実行します。
Azure Cosmos DB では複数の API モデルがサポートされているため、.NET SDK のバージョン 3 では、"コンテナー" や "アイテム" といった一般的な用語が使用されています。 コンテナーは、コレクション、グラフ、テーブルになる場合があります。 項目は、ドキュメント、エッジ/頂点、行になる場合があり、コンテナー内のコンテンツです。
以下に示すのは理解しておく必要がある主要操作の一部を示す例です。 その他の例については、前述の GitHub リンクにアクセスしてください。 次のすべての例では、メソッドの非同期バージョンを使用しています。
CosmosClient
接続文字列を使用して、新しい CosmosClient
を作成します。 CosmosClient
はスレッドセーフです。 アプリケーションの有効期間ごとに効率的な接続管理とパフォーマンスを可能とする CosmosClient
の単一インスタンスを保持することをお勧めします。
CosmosClient client = new CosmosClient(endpoint, key);
データベースのサンプル
データベースの作成
CosmosClient.CreateDatabaseAsync
メソッドは、同じ名前のデータベースが既に存在する場合、例外をスローします。
// New instance of Database class referencing the server-side database
Database database1 = await client.CreateDatabaseAsync(
id: "adventureworks-1"
);
CosmosClient.CreateDatabaseIfNotExistsAsync
により、データベースが存在するかどうかが確認され、存在しない場合は作成されます。 既存のデータベースがあるかどうかを確認するには、データベースの id
のみが使用されます。
// New instance of Database class referencing the server-side database
Database database2 = await client.CreateDatabaseIfNotExistsAsync(
id: "adventureworks-2"
);
ID によってデータベースを読み取る
非同期操作として Azure Cosmos DB サービスからデータベースを読み取ります。
DatabaseResponse readResponse = await database.ReadAsync();
データベースの削除
非同期操作としてデータベースを削除します。
await database.DeleteAsync();
コンテナーの例
コンテナーを作成する
Database.CreateContainerIfNotExistsAsync
メソッドにより、コンテナーが存在するかどうかが確認され、存在しない場合は作成されます。 既存のコンテナーがあるかどうかを確認するのに使用されるのは、コンテナー id
のみです。
// Set throughput to the minimum value of 400 RU/s
ContainerResponse simpleContainer = await database.CreateContainerIfNotExistsAsync(
id: containerId,
partitionKeyPath: partitionKey,
throughput: 400);
ID によるコンテナーの取得
Container container = database.GetContainer(containerId);
ContainerProperties containerProperties = await container.ReadContainerAsync();
コンテナーを削除する
非同期操作としてコンテナーを削除します。
await database.GetContainer(containerId).DeleteContainerAsync();
項目の例
項目を作成する
Container.CreateItemAsync
メソッドを使用して、項目を作成します。 メソッドには、id
プロパティと partitionKey
を含んでいる必要がある JSON シリアル化可能なオブジェクトが必要です。
ItemResponse<SalesOrder> response = await container.CreateItemAsync(salesOrder, new PartitionKey(salesOrder.AccountNumber));
項目を読み取る
Container.ReadItemAsync
メソッドを使用して、項目を読み取ります。 メソッドには、項目をシリアル化するための種類と、id
プロパティと partitionKey
が必要です。
string id = "[id]";
string accountNumber = "[partition-key]";
ItemResponse<SalesOrder> response = await container.ReadItemAsync(id, new PartitionKey(accountNumber));
項目にクエリを実行する
Container.GetItemQueryIterator
メソッドを使うと、SQL ステートメントをパラメーター化された値と共に使用して Azure Cosmos データベース内のコンテナー下の項目用にクエリを作成できます。 FeedIterator
が返されます。
QueryDefinition query = new QueryDefinition(
"select * from sales s where s.AccountNumber = @AccountInput ")
.WithParameter("@AccountInput", "Account1");
FeedIterator<SalesOrder> resultSet = container.GetItemQueryIterator<SalesOrder>(
query,
requestOptions: new QueryRequestOptions()
{
PartitionKey = new PartitionKey("Account1"),
MaxItemCount = 1
});
その他のリソース
azure-cosmos-dotnet-v3 GitHub リポジトリには、Azure Cosmos DB リソースに対する CRUD などの一般的な操作を実行する最新の .NET サンプル ソリューションがあります。
GitHub リポジトリ内の特定の例への直接リンクについては、SQL は、この記事の「Azure Cosmos DB: SQL API の .NET V3 SDK (Microsoft.Azure.Cosmos) のサンプル」を参照してください。