LoginSignup
2
1

More than 5 years have passed since last update.

C#でAlexa用のテーブルにデータを追加。さらにやりなおし。(高レベルAPI編)

Posted at

はじめに

AWS SDK for .NETにはC#からDynamoDBにアクセスするAPIが含まれているわけですが、それには低レベルAPIと高レベルAPIの2つがあります。
低レベルAPIというのが、これまで説明してきたやつです。
格納するデータのタイプまで指定する必要がありました。

これに対して高レベルAPIというのは名前のとおり、詳細をさらに隠して使いやすくなっています。

高レベルAPIを使ったデータの追加

高レベルAPIを使うと、データの追加を以下のように書くことができます。
データの構築にはAttributeValueではなく`Document(Amazon.DynamoDBv2.DocumentModel名前空間)クラスを使用します。

AttributeValueでは指定しなくてはならなかったデータのタイプなどはDocumentクラスがうまく隠してくれていて、データ型を気にする必要なくインスタンスにキーとデータをセットで放り込んでいくだけでOKという形になっています。
すばらしい。

            AmazonDynamoDBClient client = new AmazonDynamoDBClient(); //今回、裏方に回った。

            //目的のテーブルを取得
            var table = Table.LoadTable(client, tableName);

            //データはAttributeValueではなくDocumentを使って構築する。
            //attributes列に入れるデータの構築
            var attr2=new Document();
            attr2["sign"] = "ふたご座";//文字列でも
            attr2["number"] = 5;//整数でも
            //気にせずに入れられる。

            //挿入するレコードの構築
            var item=new Document();
            item["id"] = "testuser2";//id列
            item["attributes"] = attr2;//attributes列。上で作成したattr2を入れる。

            var result2= table.PutItemAsync(item).Result;

実行結果

これを実行すると、DynamoDBのテーブルには以下のようなデータが追加されます。
testuser2というのが今回追加したデータです。
データの型が正しく指定されて格納されています。
image.png

おまけ

このDocumentクラスですが、どんな型でも突っ込めるのかなということで、List<string>をいれてみました。
以下のように。
これでテーブルにデータを突っ込むと、どういう形で格納されるのか見てみましょう。

            //目的のテーブルを取得
            var table = Table.LoadTable(client, tableName);

            //データはAttributeValueではなくDocumentを使って構築する。
            //attributes列に入れるデータの構築
            var attr2 = new Document();
            attr2["sign"] = "ふたご座";//文字列でも
            attr2["number"] = 5;//整数でも

            //気にせずに入れられる。

            //試しにList<string>を入れてみる
            var list = new List<string>
            {
                "hello1",
                "hello2",
            };
            attr2["list"] = list;

            //挿入するレコードの構築
            var item = new Document();
            item["id"] = "testuser2";//id列
            item["attributes"] = attr2;//attributes列。上で作成したattr2を入れる。

            var result2 = table.PutItemAsync(item).Result;

DynamoDB側はこのようになります。
「SS」というのは「文字列のセット(String Set)」という意味ですね。
image.png

何も考えずにどんどん突っ込んでいけるのはとても便利ですね。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1