0

我们正在从 Lokad 切换到 CloudFx 来处理将数据放入/取出表存储的问题。

使用 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。

想法?

4

1 回答 1

0

这是我们最终实施的方法。短版:序列化对象 2 并将其填充到对象 1 的 Value 属性中,然后放入表存储中。

对象 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 可以是任何东西……在这种情况下,地址可能……它都被序列化了。

因此,在代码中,您可以按如下方式获取表格(执行此操作的方法不止一种):

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

然后假设您有一个 store() 的实例,您想将其放入表存储中:

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);

放入表存储中的实体将具有 CloudEntity 类的所有属性(行键、分区键等),并且在“值”列中将有您要存储的对象的 json。它很容易通过 Azure 存储资源管理器读取,这也很好。

要取出对象,请使用以下内容:

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

然后,您可以将它们的“值”字段反序列化为您期望的对象:

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

如果你得到一堆回来,只需将 myStore 设为一个列表并循环遍历 cloudEntities,反序列化并将每个添加到您的列表中。

希望这可以帮助!

于 2013-09-12T14:14:19.020 回答