gpt4 book ai didi

c# - Entity Framework 代码优先 : which DataType attribute for DateTime2?

转载 作者:可可西里 更新时间:2023-11-01 08:52:07 27 4
gpt4 key购买 nike

有时在使用 Entity Framework Code First 时,默认约定不会创建您想要的数据库类型。例如,默认情况下 System.DateTime 类型的属性会创建 DateTime 类型的数据库列。如果你想让它有一个 datetime2 类型(没有时区和夏令时问题的 DateTime 类型)怎么办?

可以使用 DataTypeAtrribute 通过数据注释指定所需的数据库类型。 DataTypeAttribute的 build 者之一接受参数 DataType Enumeration .所以可以指定如下内容:

[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 有一个 second constructor that accepts a string .此字符串定义为

The name of the custom field template to associate with the data field.

因此人们会假设以下内容足以创建 datetime2:

[DataType("datetime2")]
public DateTime DateOfBirth {get; set;}

唉,这行不通。创建的列仍具有 DateTime 格式。

问题:在构造函数中使用哪个字符串来创建 datetime2?

最佳答案

The DataType attribute is not used for column type mapping for Code First :

The Column annotation is a more adept in specifying the attributes of a mapped column. You can stipulate a name, data type or even the order in which a column appears in the table. [...] Don’t confuse Column’s TypeName attribute with the DataType DataAnnotation. DataType is an annotation used for the UI and is ignored by code first.

所以:

[Column(TypeName="datetime2")] 

关于c# - Entity Framework 代码优先 : which DataType attribute for DateTime2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33495848/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com