Когда-нибудь при использовании Entity Framework Code Вначале соглашения по умолчанию не создают необходимый тип базы данных. Например, по умолчанию свойство типа System.DateTime
создает столбец базы данных типа DateTime
. Что делать, если вы хотите, чтобы у него был тип datetime2
(тип DateTime
, который не имеет проблем с часовыми поясами и летнее время)?Код элемента Entity Framework Сначала: какой атрибут DataType для DateTime2?
Можно указать необходимый тип базы данных с помощью аннотаций данных с помощью DataTypeAtrribute
. Один из конструкторов DataTypeAttribute принимает параметр DataType Enumeration. Таким образом, можно было бы указать, что-то вроде:
[DataType(DataType.DateTime)]
public DateTime DateOfBirth {get; set;}
Тип DataType перечисление содержит много типов, однако он отсутствует значение для DateTime2
.
Другим подходом будет использование Fluent API. Создание DateTime2
в методе DBContext.OnModelCreating:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>().Property(p => p.BirthDate)
.HasColumnType("datetime2");
}
DataTypeAttribute имеет second constructor that accepts a string. Эта строка определена как
Имя настраиваемого шаблона поля для связи с полем данных.
Так можно было бы предположить, что следующий будет достаточно, чтобы создать Datetime2:
[DataType("datetime2")]
public DateTime DateOfBirth {get; set;}
Увы, это не работает. Созданная колонка по-прежнему имеет формат DateTime
.
Вопрос: какую строку использовать в конструкторе для создания datetime2?