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
都被存储了,但是没有其他吗?
这是怎么回事?据说int
和double
是受支持的,所以我在这里做错了什么?
Container
和FeatureEnabled
是类的属性。其他的只是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);