2013-09-09 4 views
0

Мы переходим из Lokad в CloudFx, чтобы обрабатывать вещи в/из хранилища таблиц.CloudFx эквивалент SkinnyEntity

С Lokad, у нас было 3 сущности:

1) Object 1, which added partition key and row key to 
2) Object 2 which had a bunch of properties as well as an instance of 
3) Object 3, which had its own set of properties 

Насколько я могу сказать, единственный способ для CloudFx для ввода, что информация в хранилище таблицы, чтобы придавить, что все это дело с одним массивным объектом, имеет все свойства предыдущих трех объектов. С Lokad мы могли бы просто использоватьSkinny = true.

Мысли?

ответ

0

Это метод, которым мы закончили реализацию. Короткая версия: сериализуйте объект 2 и введите его в свойство Value объекта 1, а затем поместите в хранилище таблиц.

Объект 1:

public class CloudEntity<T> 
{ 

    public CloudEntity() 
    { 
     Timestamp = DateTime.UtcNow; 
    } 

    public string RowKey { get; set; } 

    public string PartitionKey { get; set; } 

    public DateTime Timestamp { get; set; } 

    public T Value { get; set; } 
} 

Объект 2:

public class Store 
{ 
    public string StoreId { get; set; } 
    public string StoreName { get; set; } 
    public string StoreType { get; set; } 
    public Address MailingAddress { get; set; } 
    public PhoneNumber TelephoneNumber { get; set; } 
    public StoreHours StoreHours { get; set; } 
} 

Объект 3 может быть любым ... адрес в этом случае может быть ... все это получает сериализации.

Так в коде, вы можете получить следующую таблицу (более чем на 1 способ сделать это):

var tableStorage = new ReliableCloudTableStorage(connection string you're using); 

Тогда допустим у вас есть экземпляр магазина() вы хотите поместить в хранилище таблицы:

var myStore = new Store(
    { 
     storeId = "9832", 
     storeName = "Headquarters" 
     ... 
    }); 

Вы можете сделать это следующим образом:

var cloudEntity = new CloudEntity<string> 
     { 
      PartitionKey = whatever you want your partition key to be, 
      RowKey = whatever you want your row key to be, 
      Value = JsonConvert.SerializeObject(myStore) // THIS IS THE MAGIC 
     }; 

    tableStorage.Add<CloudEntity<string>>(name of table in table storage, cloudEntity); 

объект поместить в хранилище таблицы будет иметь ll свойства класса CloudEntity (ключ строки, ключ раздела и т. д.), а в столбце «Значение» будет json объекта, который вы хотите сохранить. Это легко читается через Azure Storage Explorer, который тоже хорош.

Чтобы получить объект обратно, использовать что-то вроде этого:

var cloudEntity = tableStorage.Get<CloudEntity<string>>(name of your table, partitionKey: whatever the partition key is); 

Тогда вы можете десериализации поле «Value» тех, в объект вы ожидали:

var myStore = JsonConvert.DeserializeObject<Store>(cloudEntity.Value); 

Если вы получаете кучу назад, просто сделайте myStore список и пройдите через cloudEntities, десериализуя и добавив каждый в свой список.

Надеюсь, это поможет!