Azure表存储-为什么存储bool和string属性,而不存储int和double属性?

本文关键字:存储 属性 int double string 为什么 bool Azure | 更新日期: 2023-09-27 18:09:30

这听起来应该是一个简单的问题,但是我很难把它挑出来。

我有一个TableEntity类,我试图写信给Azure Table Storage:

public class MyEntity : TableEntity
{
  public MyEntity(string imageId, string featureId)
  {
    this.PartitionKey = imageId;
    this.RowKey = featureId;
  }
  public string Container { get; set; }
  public bool FeatureEnabled { get; set; }
  public int data;
  public PointF Point;
  public double X;
  public double Y;
}

我明白我的Point属性不会被保存到表存储。但是当我插入这个实体时,Container属性和FeatureEnabled都被存储了,但是没有其他吗?

这是怎么回事?据说intdouble是受支持的,所以我在这里做错了什么?

Azure表存储-为什么存储bool和string属性,而不存储int和double属性?

ContainerFeatureEnabled是类的属性。其他的只是Fields。TableEntity将只搜索并自动保存属性(支持的类型)。

因此,通过提供get; set;来将data, x和y放入属性中,与那些有效的方式相同。

你需要为int/double属性定义getter/setter:

public class MyEntity : TableEntity
{
  public MyEntity(string imageId, string featureId)
  {
    this.PartitionKey = imageId;
    this.RowKey = featureId;
  }
  public string Container { get; set; }
  public bool FeatureEnabled { get; set; }
  public int data { get; set; }
  public PointF Point;
  public double X { get; set; }
  public double Y { get; set; }
}

TableEntity支持的属性类型非常有限。

如果你使用我实现的objectflaterrecomposer APIhttps://www.nuget.org/packages/ObjectFlattenerRecomposer/

你可以得到你所有的属性,包括点属性,写到表存储,api也处理重组原始对象当你从表存储读取回实体。

下面是一个用法示例:

using ObjectFlattenerRecomposer;
//Flatten object and convert it to EntityProperty Dictionary
Dictionary<string, EntityProperty> flattenedProperties = EntityPropertyConverter.Flatten(complexObject);
// Create a DynamicTableEntity and set its PK and RK
DynamicTableEntity dynamicTableEntity = new DynamicTableEntity(partitionKey, rowKey);
dynamicTableEntity.Properties = flattenedProperties;
// Write the DynamicTableEntity to Azure Table Storage using client SDK
//Read the entity back from AzureTableStorage as DynamicTableEntity using the same PK and RK
DynamicTableEntity entity = [Read from Azure using the PK and RK];
//Convert the DynamicTableEntity back to original complex object.
Imagine original complexObject was of type Order.
Order order = EntityPropertyConverter.ConvertBack<Order>(entity.Properties);