Azure: как сохранить IDictionary <String>в TableStorage? - PullRequest
2 голосов
/ 28 ноября 2010

У меня есть класс с IDictionary.Размер этого объекта не привязан к какому-либо конкретному размеру.Идея состоит в том, чтобы иметь Динамическую Схему моего объекта.Я хочу сохранить этот объект в TableStorage.Как я могу это сделать?И как я могу получить эту информацию из хранилища после этого внутри моего объекта с IDictionary снова ??

Ответы [ 3 ]

1 голос
/ 25 апреля 2015

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;
}
0 голосов
/ 05 августа 2013

Вы можете использовать события Read и Write из TableStorageContext для выполнения этого. Вам необходимо хранить содержимое IDictionary в другом поле или в виде BLOB-файла. В событии Read вы создаете IDictionary из заданного поля или извлекаете его непосредственно из BLOB-файла. В событии Write вы сохраняете IDictionary в поле или в виде BLOB-файла.

Важное замечание: Событие Write наступает после шага переноса сущности, а затем, если вы выберете полевой способ, вам может потребоваться записать изменения непосредственно в сериализацию XML сущности.

ЭТО звучит сложно, но очень полезно во многих сценариях

0 голосов
/ 28 ноября 2010

Словари по умолчанию не сериализуемы. Объект должен быть сериализуемым, чтобы быть сохраненным в TableStorage. Я предлагаю вам использовать объекты типа List или Array или написать свой собственный сериализатор для Dictionary, если List или Arrays вам не подходят.

...