c# - 实体框架,从 datetime 迁移到 datetimeoffset
问题描述
我们想要什么:
我们在 sql server 数据库的表中有一个列,其数据类型为datetime
. 我们决定将此列的数据类型更改为datetimeoffset(7)
.
到目前为止我们得到了什么:
- 第一种方法:
主要建议这样做的方法(可以在这里看到)是:
使用新类型添加新列
使用 Sql() 使用更新语句从原始列中接管数据
删除旧列
重命名新列
-第二种方法:
但是还有另一种解决方案来完成这项工作,(可以在这里看到)我们这样改编:
// 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()
语句,更正偏移部分。
问题是:
采用第二种方法时,有什么重要的事情需要注意吗?
人们有什么理由喜欢第一种方法,尽管第二种方法更容易做到?是否有任何理由让您建议其中一种方法优于另一种?
解决方案
如果您需要处理历史日期时间值,这可能是在本地夏令时,我会选择选项 2。更改列类型,然后使用 sql 更新值;
... _ColumnName_ = cast(_ColumnName_ as datetime2(7)) AT TIME ZONE '<name of timezone>'
推荐阅读
- javascript - localStorage 不会存储数据
- mongodb - 如何在 MongoDb 中直接存储图像对象
- python-3.x - 窗口销毁后如何使用 Tkinter colorchooser 值?
- uml - 我应该把用例图中包含的用例放在我的类图中吗?
- php - 如何计算年、月和日的年龄
- python - 无法以编程方式下载远程 Maven 存储库中的所有文件
- python-3.x - Python3 网页抓取,csv 输出显示 TypeError: can only concatenate list (not "str") to list
- python - 即使此条件的“IF”部分为真,只有 else 部分正在执行。无论输入是什么,只有 Else 执行
- javascript - 如何在 Greasemonkey 中重定向到我的 youtube 订阅页面?
- javascript - v-img 没有在功能组件中呈现 - Vuetify 2