在使用Entity Framework Code First时,有时默认约定不能创建所需的数据库类型。例如,默认情况下,类型为System.DateTime的属性会创建一个DateTime类型的数据库列。如果想要它具有datetime2类型(没有时区和夏令时问题的DateTime类型),该怎么办呢?
可以使用数据注释(Data Annotations)来指定所需的数据库类型,其中一个构造函数DataTypeAttribute接受一个DataType枚举参数。因此,可以指定类似以下内容:
[DataType(DataType.DateTime)]
public DateTime DateOfBirth {get; set;}
DataType枚举类型包含很多类型,但是它缺少一个DateTime2
的值。
另一种方法是使用Fluent API。在DBContext.OnModelCreating方法中创建DateTime2
:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>().Property(p => p.BirthDate)
.HasColumnType("datetime2");
}
DataTypeAttribute有一个第二个构造函数,接受一个字符串。该字符串被定义为:
与数据字段关联的自定义字段模板的名称。
因此,人们可能会认为以下内容足以创建datetime2:
[DataType("datetime2")]
public DateTime DateOfBirth {get; set;}
哎呀,这样不行。创建的列仍然具有DateTime
格式。
问题:在构造函数中使用哪个字符串来创建datetime2?