Azureテーブルストレージは、(int、string、Guid、DateTime)などの基本データタイプのみをサポートします。ネストされたオブジェクト。 List <>などのコレクションデータ型を直接格納することもサポートされていません。ネストされたオブジェクトとカスタムプロパティタイプをサポートするAzure TableのITableEntityインターフェイスの実装
このため、ITableEntityから継承し、新しく導入されたTableEntity.Flatten(...)
およびTableEntity.ConvertBack<TResult>(...)
メソッドを使用してReadEntityメソッドとWriteEntityメソッドを実装したCustomEntityクラスを作成しました。私は現在、入れ子になったオブジェクトの格納にのみ焦点を当てています。
public class CustomEntity : ITableEntity
{
// Partition Key, Row Key, Timestamp and ETag here
public void ReadEntity(IDictionary<string, EntityProperty> properties, OperationContext operationContext)
{
CustomEntity customEntity = TableEntity.ConvertBack<CustomEntity>(properties, operationContext);
// Do the memberwise clone for this object from the returned CustomEntity object
CloneThisObject(this, customEntity);
}
public IDictionary<string, EntityProperty> WriteEntity(OperationContext operationContext)
{
IDictionary<string, EntityProperty> flattenedProperties = TableEntity.Flatten(this, operationContext);
flattenedProperties.Remove("PartitionKey");
flattenedProperties.Remove("RowKey");
flattenedProperties.Remove("Timestamp");
flattenedProperties.Remove("ETag");
return flattenedProperties;
}
}
私のモデルで上記のコードを使用し、Azureテーブルにネストされたオブジェクトを正常に挿入できました。この問題は、同じオブジェクトを取得したいときに発生します。コードはtable.Execute(TableOperation.Retrieve(partitionKey, rowKey))
コマンドで無限ループに陥ります。
また、CustomEntityオブジェクトの挿入操作中にWriteEntityコードがヒットしましたが、エンティティの取得中にReadEntityコードがヒットしませんでした。私はここで何が欠けていますか?どんな助けでも大歓迎です。
あなたは問題の短い、完全な再版を投稿できますか? –
キーバリューストアとして設計されたエンジンにドキュメントストアの種類を作成しようとしているのはなぜですか?なぜCosmosDBを使わないのですか?または、jsonドキュメントをテーブルストレージ列に格納するだけですか? –
@ PeterBons価格、パフォーマンス、クエリパターン、バッチ処理などのテーブルストレージと階層オブジェクトを使用する理由はたくさんあります。 – Igorek