You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Entity Framework Code First中DateTime属性自动转为TimeStamp如何解决

问题产生原因
  • 第一类是EF数据库提供程序的默认映射规则:你使用的数据库对应EF提供程序(比如MySQL、Oracle、PostgreSQL的EF/EF Core驱动)内置了命名约定,当DateTime类型属性名称包含CREATION_DATE、TIMESTAMP这类关键词时,会自动映射为数据库端的Timestamp类型用于行版本追踪或并发控制。
  • 第二类是项目自定义配置导致:你可能在实体属性上误加了[Timestamp]特性,或是在DbContext的Fluent API配置、全局约定配置中,指定了DateTime类型或该名称属性的默认映射类型为Timestamp。
解决方案

方案1:通过数据注解显式指定字段类型

直接在属性上添加[Column]特性明确指定数据库字段类型,根据你使用的数据库调整类型名即可,示例代码如下:

using System.ComponentModel.DataAnnotations.Schema;

// SQL Server可填"datetime"或"datetime2",MySQL/PostgreSQL填对应datetime类型名即可
[Column(TypeName = "datetime")]
public DateTime CREATION_DATE { get; set; }

方案2:通过Fluent API显式配置映射

如果你的项目统一使用Fluent API做实体配置,可以在DbContext的OnModelCreating方法中指定该属性的映射规则:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    // 将<YourEntity>替换为你的实体类名称
    modelBuilder.Entity<YourEntity>()
        .Property(p => p.CREATION_DATE)
        .HasColumnType("datetime");
}

方案3:清理错误的全局约定配置

如果检查发现项目中配置了全局自动映射规则,将包含特定关键词的DateTime属性默认映射为Timestamp,删除对应全局配置即可。

完成配置后删除之前生成的错误迁移文件,重新执行add-migration命令生成新迁移,即可确认字段类型已按预期生成。


内容的提问来源于stack exchange,提问作者Raed Alsaleh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:36:03