Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9707

AWS SDK for .NET を使った DynamoDB へのアクセス方法

$
0
0

AmazonDynamoDBClient を使ったアクセス

  • DynamoDBの開発ガイドのいわゆるチュートリアルで紹介されているやり方です
  • 取得できるItemsのクラスがList<Dictionary<string, AttributeValue>>でORMを自身で行う必要があります
// dotnet add package AWSSDK.DynamoDBv2usingAmazon;usingAmazon.DynamoDBv2;usingAmazon.DynamoDBv2.Model;usingSystem.Threading.Tasks;classProgram{staticasyncTaskMain(){varclient=newAmazonDynamoDBClient();vartableName="SampleTable2";varreq=newScanRequest(tableName);varresp=awaitclient.ScanAsync(req);varitems=resp.Items;}}

DynamoDBContext を使ったアクセス

// dotnet add package AWSSDK.DynamoDBv2usingAmazon;usingAmazon.DynamoDBv2;usingAmazon.DynamoDBv2.DataModel;usingSystem.Threading.Tasks;classProgram{staticasyncTaskMain(){varclient=newAmazonDynamoDBClient();varcontext=newDynamoDBContext(client);varitems=awaitcontext.ScanAsync<SampleTableItem>(null).GetRemainingAsync();}}[DynamoDBTable("SampleTable")]classSampleTableItem{// PartitionKey = user_id (String)// SortKey = item_id (String)[DynamoDBHashKey("user_id")]publicstringUserId{get;set;}[DynamoDBRangeKey("item_id")]publicstringItemId{get;set;}}

DynamoDBContext使用時のテーブル名の指定方法

  • 基本的に、マッピング先のクラスにDynamoDBTable属性を付け、その引数でテーブル名を指定します
  • しかし、AWSConfigsDynamoDB.Context.AddMappingメソッドを使用することでもテーブル名を指定することができます
  • テーブル名を環境変数や設定ファイル等から取得して設定したい場合はこの方法で行うのが良いかと思います
// dotnet add package AWSSDK.DynamoDBv2usingAmazon;usingAmazon.DynamoDBv2;usingAmazon.DynamoDBv2.DataModel;usingAmazon.Util;usingSystem.Threading.Tasks;classProgram{staticasyncTaskMain(){varclient=newAmazonDynamoDBClient();varcontext=newDynamoDBContext(client);AWSConfigsDynamoDB.Context.AddMapping(newTypeMapping(typeof(SampleTableItem),"SampleTable"));varitems=awaitcontext.ScanAsync<SampleTableItem>(null).GetRemainingAsync();}}classSampleTableItem{// PartitionKey = user_id (String)// SortKey = item_id (String)[DynamoDBHashKey("user_id")]publicstringUserId{get;set;}[DynamoDBRangeKey("item_id")]publicstringItemId{get;set;}}
  • ちなみにテーブル名を指定していない場合は、型パラメータで指定したクラスの名前がテーブル名として使用されます
  • 以下の場合、"SampleTableItem"がScan先のテーブル名となります
varclient=newAmazonDynamoDBClient();varcontext=newDynamoDBContext(client);varitems=awaitcontext.ScanAsync<SampleTableItem>(null).GetRemainingAsync();classSampleTableItem{publicstringUserId{get;set;}publicstringItemId{get;set;}}

DynamoDBContext使用のサンプルコード

usingSystem;usingSystem.Linq;usingSystem.Threading.Tasks;// dotnet add package AWSSDK.DynamoDBv2usingAmazon;usingAmazon.Util;usingAmazon.DynamoDBv2;usingAmazon.DynamoDBv2.DataModel;classProgram{staticasyncTaskMain(){varclient=newAmazonDynamoDBClient();varcontext=newDynamoDBContext(client);AWSConfigsDynamoDB.Context.AddMapping(newTypeMapping(typeof(SampleTableData),"SampleTable"));//// データの追加 (PutItem処理)//varitem=newSampleTableData{PartitionKey=0,SortKey="SK0",Property1=DateTime.Now};awaitcontext.SaveAsync(item);//// 複数データの追加 (BatchWriteItem処理)//varbatchWrite=context.CreateBatchWrite<SampleTableData>();varitems=Enumerable.Range(1,9).Select(i=>newSampleTableData{PartitionKey=0,SortKey="SK"+i,Property1=DateTime.Now});batchWrite.AddPutItems(items);awaitbatchWrite.ExecuteAsync();//// データの取得 (Query処理)//constintscanPartitionKey=0;varqueriedItems=awaitcontext.QueryAsync<SampleTableData>(scanPartitionKey).GetRemainingAsync();//// データの削除 (DeleteItem処理)//awaitcontext.DeleteAsync(queriedItems.First());//// 複数データの削除 (DeleteItem処理)//varbatchDelete=context.CreateBatchWrite<SampleTableData>();batchDelete.AddDeleteItems(queriedItems.Skip(1).Take(4));awaitbatchDelete.ExecuteAsync();}classSampleTableData{[DynamoDBHashKey("PK")]publicintPartitionKey{get;set;}[DynamoDBRangeKey("SK")]publicstringSortKey{get;set;}[DynamoDBProperty("Property1")]publicDateTimeProperty1{get;set;}}}

Viewing all articles
Browse latest Browse all 9707

Trending Articles