IDictionary を持つクラスがあります。このオブジェクトのサイズは、特定のサイズに固定されていません。これのアイデアは、私のオブジェクトの動的スキーマを持つことです。このオブジェクトを TableStorage に格納したいと考えています。これどうやってするの?そして、IDictionaryを使用してオブジェクト内でこの情報をストアから取得するにはどうすればよいですか??
ありがとう!!
IDictionary を持つクラスがあります。このオブジェクトのサイズは、特定のサイズに固定されていません。これのアイデアは、私のオブジェクトの動的スキーマを持つことです。このオブジェクトを TableStorage に格納したいと考えています。これどうやってするの?そして、IDictionaryを使用してオブジェクト内でこの情報をストアから取得するにはどうすればよいですか??
ありがとう!!
DynamicTableEntity
IDictionary<string,EntityProperty>
パラメータとして取ります。
このコードは次の場所で実行されLinqPad
ます:
void Main()
{
var account = "";
var key = "";
var tableName = "";
var storageAccount = GetStorageAccount(account, key);
var cloudTableClient = storageAccount.CreateCloudTableClient();
var table = cloudTableClient.GetTableReference(tableName);
var partitionKey = "pk";
var rowKey = "rk";
//create the entity
var entity = new DynamicTableEntity(partitionKey, rowKey, "*",
new Dictionary<string,EntityProperty>{
{"Prop1", new EntityProperty("stringVal")},
{"Prop2", new EntityProperty(DateTimeOffset.UtcNow)},
});
//save the entity
table.Execute(TableOperation.InsertOrReplace(entity));
//retrieve the entity
table.Execute(TableOperation.Retrieve(partitionKey,rowKey)).Result.Dump();
}
static CloudStorageAccount GetStorageAccount(string accountName, string key, bool useHttps = true)
{
var storageCredentials = new StorageCredentials(accountName, key);
var storageAccount = new CloudStorageAccount(storageCredentials, useHttps: useHttps);
return storageAccount;
}
デフォルトでは、辞書はシリアル化できません。TableStorageに保存するには、オブジェクトがシリアル化可能である必要があります。リストまたは配列タイプのオブジェクトを使用するか、リストまたは配列が十分でない場合は、辞書用に独自のシリアライザーを作成することをお勧めします。
これを実行するには、TableStorageContext の Read イベントと Write イベントを使用できます。IDictionary コンテンツを他のフィールドに保存するか、BLOB ファイルとして保存する必要があります。Read イベントでは、指定されたフィールドから IDictionary を作成するか、BLOB ファイルから直接取得します。Write イベントでは、IDictionary をフィールドに保存するか、BLOB ファイルとして保存します。
重要: Write イベントは、エンティティの翻訳ステップの後に発生します。フィールドの方法を選択した場合、変更をエンティティの XML シリアル化に直接書き込む必要がある場合があります。
これは難しく聞こえますが、多くのシナリオで非常に役立ちます