что мы хотим:
У нас есть столбец в таблице в базе данных сервера SQL, тип данных которого 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()
после этого исправляет смещенную часть.
вопросы:
Есть ли какая-то важная вещь, о которой нужно позаботиться при втором подходе?
Есть ли причина, по которой люди предпочитают первый подход, хотя второй легче сделать?
Есть ли причина, по которой вы предлагаете один из этих подходов по сравнению с другим?