【问题标题】:assign default value to DateTime property in table entity of azure storage table为 Azure 存储表的表实体中的 DateTime 属性分配默认值
【发布时间】:2017-03-28 01:42:04
【问题描述】:

如何为 Azure 存储表的表实体中的 DateTime 属性分配默认值。

我正在尝试下面的代码,但我无法设置值(插入时从 Azure 表中抛出错误,因为 DateTime 的取值时间为 1/1/0001)。

[DefaultValue(DateTime.Now]

public DateTime LastUpdate { get; set; }

【问题讨论】:

    标签: azure azure-storage azure-table-storage


    【解决方案1】:

    根据 msdn,可以进入 datetime 属性的值是“以协调世界时 (UTC) 表示的 64 位值。支持的 DateTime 范围从公元 1601 年 1 月 1 日午夜 12:00 开始 (CE) , UTC。范围结束于 9999 年 12 月 31 日。"

    所以你不能分配 DateTime.MinValue。您可以存储的最低值是 new DateTime(1601, 1, 1)

    【讨论】:

    • 是的,我明白,最小值是 1601/1/1,但我的问题是如何从实体模型中的属性中将其分配为默认值。
    • 这只是表服务情况下的另一列。因此,您更新其他列的方式也将在此列中进行。
    • 我正在更新该列,但如果 datetime 的值为空,则默认 c# 对象将转换为 1/1/0001(因为这是 c# 中 datetime 的默认值),我得到将实体更新/插入到天蓝色表时出错。所以我想为模型中的 Datetime 属性设置默认值。
    • 您在“TableOperation.Insert”操作中遇到错误吗?在实体对象中,您需要有代码将值插入 Lastupdate 列并删除模型中该列的 DefaultValue 属性。或者您可以在模型/实体类中为该属性添加一个 set 方法。它应该始终设置该值。
    【解决方案2】:

    正如@Aravind 在答案中提到的,Azure Tables 支持的DateTime 类型属性的最小值是Jan 1, 1600 UTC。因此将默认值设置为DateTime.MinValue会导致错误。

    一种可能的解决方案是将此属性 nullable 保留在您的模型中。

    public DateTime? LastUpdate { get; set; }
    

    因此,当没有提供任何值时,默认值为 null。您需要删除上面 cmets 中提到的 DefaultValue 属性。

    【讨论】:

    • 即使Datetime不允许在Azure Table中为null,抛出can't be null错误。
    • 你能用你正在使用的代码更新你的问题吗?我在 Azure Tables 中使用了可为空的日期/时间字段,这当然是允许的。我的猜测是您的代码还有其他问题。
    猜你喜欢
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2019-02-16
    相关资源
    最近更新 更多