我在Azure表中有一个字段,该字段以字符串格式保存日期时间。我想用DateTime字段替换它,然后在字符串列中转换值。最好的方法是什么?

在SQL中,我会通过创建新列并运行更新语句来做到这一点...

有帮助吗?

解决方案

我自己没有尝试过这个,但是这是 /应该 /工作的步骤。这需要是C#/VB/ETC脚本。

  1. 更改类的定义,以包含类型DateTime的A / New /成员。
  2. 运行LINQ查询以加载表中的所有行,并运行A for循环,该循环将基于旧字符串变量填充新的DateTime变量。
  3. 将对象保存到表。 //现在您的表存储包含具有该变量的新定义的对象
  4. 从类定义中删除旧字段
  5. 再次从表中加载对象,并保存它们,除了将它们标记为脏外,都可以做任何事情。这个 /应该 /从桌子内的串行结构中摆脱旧成员。现在,如果您希望新的DateTime字段再次将原始字符串变量的名称命名为步骤1 Thru 5,这次将数据从一个字段移动到另一个字段。唯一的区别是您不必再次进行转换。

通常,这是一个完整的PITA,也是对象数据库和存储服务的范围之一。

其他提示

Azure表存储客户端本来可以理解DateTime(但不是DateTimeOffset),因此您可能需要考虑简单地让SDK为您处理此事。

否则,将数据表示为字符串的最佳方法是将其作为使用“ U”格式编写和解析的UTC值显式存储和检索,例如

var dateAsString = myDateTime.ToString("u");

我不知道它是否会起作用,但是您可以尝试“幸福的无知”:

真正的表存储实际上并不关心您的实体的形状(开发面料可能不同)。将您的实体属性更改为DateTime,但是在设置器测试中,值是DATETIME,即使不是将值解析为DT。就像是

private DateTime myDT
public DateTime MyDT
{
    get
    {
        return myDT;
    }
    set
    {
       DateTime = null;
       if(value is DateTime)
       {
           myDT = value;
       }
       else
       {
           myDT = DateTime.Parse(value);
       }
    }

}

希望随着时间的流逝,或在批处理中明确,如果您简单地加载实体并再次保存它们,它将它们全部设置为DateTime。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top