gpt4 book ai didi

c# - 在 Azure 表中存储十进制数据类型

转载 作者:可可西里 更新时间:2023-11-01 07:44:47 24 4
gpt4 key购买 nike

Windows Azure 表存储 does not support 十进制数据类型。

一个suggested workaround就是使用自定义属性将decimal属性序列化为字符串:

[EntityDataType(PrimitiveTypeKind.String)]
public decimal Quantity { get; set; }

如何实现此 EntityDataType 自定义属性,以便可以在 Windows Azure 表中存储和检索小数属性?

最佳答案

覆盖ReadEntityWriteEntity在基类中对此很有好处。没有必要写EntityResolver每次检索实体时。

public class CustomTableEntity : TableEntity
{
public override void ReadEntity(IDictionary<string, EntityProperty> properties, OperationContext operationContext)
{
base.ReadEntity(properties, operationContext);

foreach (var thisProperty in
GetType().GetProperties().Where(thisProperty =>
thisProperty.GetType() != typeof(string) &&
properties.ContainsKey(thisProperty.Name) &&
properties[thisProperty.Name].PropertyType == EdmType.String))
{
var parse = thisProperty.PropertyType.GetMethods().SingleOrDefault(m =>
m.Name == "Parse" &&
m.GetParameters().Length == 1 &&
m.GetParameters()[0].ParameterType == typeof(string));

var value = parse != null ?
parse.Invoke(thisProperty, new object[] { properties[thisProperty.Name].StringValue }) :
Convert.ChangeType(properties[thisProperty.Name].PropertyAsObject, thisProperty.PropertyType);

thisProperty.SetValue(this, value);
}
}

public override IDictionary<string, EntityProperty> WriteEntity(OperationContext operationContext)
{
var properties = base.WriteEntity(operationContext);

foreach (var thisProperty in
GetType().GetProperties().Where(thisProperty =>
!properties.ContainsKey(thisProperty.Name) &&
typeof(TableEntity).GetProperties().All(p => p.Name != thisProperty.Name)))
{
var value = thisProperty.GetValue(this);
if (value != null)
{
properties.Add(thisProperty.Name, new EntityProperty(value.ToString()));
}
}

return properties;
}
}

使用时,只需让你的实体从 CustomTableEntity 扩展即可并且在插入或检索实体时它将是透明的。它支持DateTime , TimeSpan , decimal以及那些拥有 Parse 的类型方法或实现IConvertible接口(interface)。

关于c# - 在 Azure 表中存储十进制数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11071899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com