2017-09-09 19 views
0

オブジェクトに表エンティティオブジェクトのリストが含まれている場合、紺碧のテーブルからオブジェクトを取得する方法が混乱します。ここで私は複雑なタイプの紺碧のテーブルストア

public class Class1 : TableEntity 
{ 
    public string Property1 { get; set; } 
    public string Property2 { get; set; } 
    public List<Class2> Items { get; set; } 
} 

public class Class2 : TableEntity 
{ 
    public string Property1 { get; set; } 
    public string Property2 { get; set; } 
} 

は、今私は、ユーザIDによってパーティションしようとしていると私はのリストを得ることができるので、その後、各クラス1は、いくつかのIDの行キーを持っているでしょう保存しようとしているものの一例です与えられたユーザーのためにclass1、または私はユーザーとIDを知ることによって単一のclass1オブジェクトを得ることができます。私はSQLの世界から来て、新しいテーブルストレージになっているので、私はこの全部を間違って考えているかもしれません。

Class1をテーブルストレージに保存しようとすると、リスト以外はすべて保存されます。クラス1オブジェクトを格納する最良の方法は何ですか?それも可能ですか?また、メインオブジェクトと同じテーブルにリストを格納しないでください。私はリスト内の個々のアイテムを編集する必要があるシナリオを持っていますが、それらをすべて1つのテーブルに格納すると、オブジェクト全体を引き出し、リストからアイテムを見つけて編集したいオブジェクト全体を戻す。

私は紺碧のテーブルストレージガイドを使い始めましたが、ここで私が見ているシナリオには意味をなさないものはありませんでした。

答えて

2

リストはサポートされているテーブルのストレージタイプではありません。他のコレクションでも、.netの数字のないタイプでもありません。あなたのリストのプロパティをJsonの文字列に変換することができますし、それは大丈夫でしょう。もちろん、オブジェクト全体をjsonの文字列に変換してテーブルに書き込むこともできますが、BLOBストレージのような空のテーブルストレージを使用するようになります。また、jsonのドキュメントdbデータモデルを使用して、azure cosmos dbを検討することもできます。そして、あなたはjsonのドキュメントを作成し、それをazure cosmos dbに保存するのと同じようにリストやその他のプロパティの型を書くことができます。

複雑な型にIEnumerable、ICollection型のプロパティがない限り、複雑な型を空白のテーブルストレージに書き込み、読み取ることは実際に可能です。そのため、オブジェクトAには複雑な型BとCのプロパティがあり、独自のプロパティなどを持つことができます。これらの型のオブジェクトをテーブルストレージに書き込んで読み込む方法は、最近追加されたTableEntity.FlattenConvertBackのメソッドを使用することです> Azure Storage .NET SDKのv8.0.0.0)。

これらのAPIは、ネストされた複雑なプロパティを使用して複雑なオブジェクトを平坦化し、透明なテーブルストレージから透過的に読み取ったとき元の複雑なオブジェクトを元に戻します。注意点は、IEnumerableICollectionタイプのプロパティをサポートしていないことです。私はまだ複雑な型をテーブル記憶装置に書き込むという話題に関してこれを言及することは良いと思っていました。

アップデート:私は同様IEnumerableタイプをサポートする(AzureストレージSDKでTableEntity.Flatten/ConvertBack<T> APIのための元のソースコードであった)ObjectFlattenerRecomposer Nugetパッケージを拡張した 。したがって、パッケージは以下で説明するように正確に動作し、複雑なオブジェクトを平坦化/再構成しますが、IEnumerablesも処理します。

ここで試すことができます:https://www.nuget.org/packages/ObjectFlattenerRecomposer/

関連する問題