Azure表存储的设计查询

时间:2017-09-21 09:44:40

标签: c# asp.net-mvc azure azure-table-storage

我有2个C#MVC模型

  1. SignalModel
  2. DeviceSignalModel
  3. SignalModel ==> 包含Signal say MasterSignal

    的属性

    DeviceSignalModel ==> 包含与设备相关的所有信号属性

    因此,除了DeviceSignalModel需要具有DeviceID的附加属性外,预期两者都具有相同的属性。

    模型SignalModel将包含列==> id,名称,单位,范围...... 表示Azure存储表signal

    我使用下面的表格来获取表格signal

    中的数据
    TableOperation retOp = TableOperation.Retrieve<SignalModel>(..,..,..);
    TableResult tr = table.Execute(retOp);
    

    我有另一个Azure存储表devicesignal,它由模型DeviceSignalModel表示 我将模型设计为

    public class DeviceSignalModel : TableEntity, IAzureTableStorage
        {
            //public int DeviceSignalKey { get; set; }// RowKey for Unique Key
            //public string DeviceSignalID { get; set; }// PartitionKey of Storage Table Device
    
            public SignalModel Signal { get; set; }//<===== (A) Model here right?
    

    要从devicesignal获取数据,请使用以下

    TableOperation retOp = TableOperation.Retrieve<DeviceSignalModel>(..,..,..);
    TableResult tr = table.Execute(retOp);
    

    根据上述查询,我​​不会从devicesignal表(上面的语句(A))获取SignalModel中表示的列的值。我得到一个null属性信号。

    我的查询

    1.上述代码段中的陈述(A)不可能吗?

    1. SignalModel中的所有属性是否应该显式放在DeviceSignalModel中(而不是将对象作为属性?
    2. 如果是这样,当信号表未来发生变化(添加属性)时,避免在Signal和DeviceSignal中添加相同属性的最佳选择是什么。

1 个答案:

答案 0 :(得分:1)

您无法将自定义SignalModel设为属性类型。如果要在SignalModel实体中维护DeviceSignalModel类型对象信息,可以尝试将SignalModel类型对象序列化为JSON字符串,并将其另存为DeviceSignalModel的属性值实体。或者正如davethecoder所说,如果可能,您可以使用Azure DocumentDB来存储您的数据。

此外,如您所述,要在Azure Table服务中实现信号 DeviceSignal 之间的关系,将SignalModel实体的特定属性放在DeviceSignalModel实体中可能是一种方法。此外,您可以参考this article了解Azure表服务中的建模关系和表设计模式。