WebJobsを使うときには、TableStorageに対してICollectorでデータを追加したり、IQueryableでデータを検索したりできて便利でしたが、より細かな制御(ここでいうupsertみたいなこと)をするにはTableStrageのAPIを直接たたく必要があります。 TableStorageのAPIを直接たたくには、CloudTableを引数に受け取るようにします。
以下のコードはキューに入れられたJSONをテーブルに突っ込むコードです。すでにデータが存在する場合は既存のデータとマージします。
using Microsoft.Azure.WebJobs; using Microsoft.WindowsAzure.Storage.Table; namespace HelloWorld { publicclass Functions { // This function will get triggered/executed when a new message is written // on an Azure Queue called queue.publicstaticvoid ProcessQueueMessage( [QueueTrigger("queue")] Person message, [Table("sample")] CloudTable sample) { var op = TableOperation.InsertOrMerge(message); sample.Execute(op); } } publicclass Person : TableEntity { publicstring Name { get; set; } } }
queueにこんなJSONを投げ込むと
{"PartitionKey": "okazuki", "RowKey": "test", "Name": "sample taro"}
テーブルにデータが作られます
次にこんなJSONを投げ込むと
{"PartitionKey": "okazuki", "RowKey": "test", "Name": "tanaka"}
データが書き換わります。