データベースの作成
次に、データベースを作成するための、CreateDatabaseIfNotExistsAsyncメソッドを作成します。
リスト6のコードではデータベースへのアクセスを試みて、データベースが存在しなかった場合に発生する例外、DocumentClientExceptionをキャッチし、その例外オブジェクトのHTTPステータスコードが「404(Not Found)」だった場合にデータベースを作成するようにしています。
private static async Task CreateDatabaseIfNotExistsAsync() { try { // データベースを参照する await client.ReadDatabaseAsync(UriFactory.CreateDatabaseUri(DatabaseId)); } catch (DocumentClientException e) { if (e.StatusCode == HttpStatusCode.NotFound) { // データベースが存在しなかったため、新規作成する await client.CreateDatabaseAsync(new Database {Id = DatabaseId}); } else { throw; } } }
コレクションの作成
コレクションの作成は、CreateCollectionIfNotExistsAsyncメソッドに追加していきます。
コードの流れはデータベースの作成とほぼ同じで、コレクションへのアクセスを試みても、それが存在しなければ新たにコレクションを作成するようにしています。
private static async Task CreateCollectionIfNotExistsAsync() { try { // コレクションを参照する await client.ReadDocumentCollectionAsync( UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId)); } catch (DocumentClientException e) { if (e.StatusCode == HttpStatusCode.NotFound) { // コレクションが存在しなかったため、新規作成する await client.CreateDocumentCollectionAsync( UriFactory.CreateDatabaseUri(DatabaseId), new DocumentCollection {Id = CollectionId}, new RequestOptions {OfferThroughput = 400}); // OfferThroughputにはRU/sを設定する } else { throw; } } }
コード中のCreateDocumentCollectionAsyncメソッドでは、第3引数で作成するコレクションのオプション情報を指定します。OfferThroughputだけは必須入力となっており、ここには前回説明したRU/sを設定する必要があります。今回は、RU/sとして指定できる最低値の400を指定しています。
初期化メソッドの修正
初期化メソッドの中に、データベースとコレクションの作成メソッドを呼び出すコードを追加します。Initializeメソッドをリスト8の通りに修正してください。
public static void Initialize() { client = new DocumentClient(new Uri(EndpointUrl), AuthKey); CreateDatabaseIfNotExistsAsync().Wait(); CreateCollectionIfNotExistsAsync().Wait(); }
Program.csに移り、Mainメソッドから初期化メソッドを呼び出すようにします。
static void Main() { DocumentRepository.Initialize(); }
ここまで実装したところで一度アプリを起動して、データベースとコレクションが作成されるかを確認してみましょう。
Program.csを実行後、EmulatorのExplorerの画面を更新します。[Collections]の部分に、DemoDBが表示されていて、ツリーを展開するとTodoCollectionが表示されていればデータベースとコレクションの作成は完了です。