实体框架,从datetime迁移到datetimeoffset

问题描述 投票:2回答:1

我们想要什么:

我们在sql server数据库的表中有一列,其数据类型为datetime。我们决定将此列的数据类型更改为datetimeoffset(7)

到目前为止我们得到了什么:

-first approach:

主要建议这样做的方式(可以看作here)是:

  1. 使用新类型添加新列
  2. 使用Sql()使用update语句从原始列接管数据
  3. 删除旧列
  4. 重命名新列

-second approach:

但还有另一个解决方案来完成这项工作,(可以看到here),我们这样调整:

    // this is part of our migration file:

    public override void Up()
    {
        AlterColumn("_TableName_", "_ColumnName_", c => c.DateTimeOffset(nullable: true, precision: 7));
        Sql(@"
update Tralus.MelkRadar.Crawl
set _ColumnName_ = todatetimeoffset(_ColumnName_, '+04:30')          
");
    } 
  • AlterColumn更改数据库中的数据类型,保留数据并将offset部分数据设置为00:00
  • 之后的Sql()声明,纠正了偏移部分。

问题是:

采取第二种方法时,有什么重要的事情要照顾吗? 有没有理由为什么人们更喜欢第一种方法,尽管第二种方法更容易做到?是否有任何理由让您建议使用其中一种方法而不是另一种方法?

c# sql-server entity-framework datetimeoffset
1个回答
0
投票

如果您需要处理历史日期时间值,可能是在本地夏令时期间,我会选择选项2.更改列类型,然后使用sql更新值;

... _ColumnName_ = cast(_ColumnName_ as datetime2(7)) AT TIME ZONE '<name of timezone>'

© www.soinside.com 2019 - 2024. All rights reserved.