雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

EntityFramework SQLite 为时间字段设置默认值为当前时间

2024-12-09 15

在使用 Entity Framework Core 和 SQLite 时,可以通过以下步骤为时间字段设置默认值为当前时间:

方法一:在模型配置中设置默认值

你可以在 DbContext 的 OnModelCreating 方法中,通过 Fluent API 配置默认值:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<YourEntity>()
        .Property(e => e.YourDateTimeField)
        .HasDefaultValueSql("CURRENT_TIMESTAMP");
}

解释:

YourEntity 是你的实体类。

YourDateTimeField 是你要设置默认值的字段。

"CURRENT_TIMESTAMP" 是 SQLite 中的默认值表达式,表示当前时间。

方法二:通过数据注解设置默认值

如果你更喜欢使用数据注解,可以使用 DefaultValueSql 特性:

[DefaultValueSql("CURRENT_TIMESTAMP")]
public DateTime YourDateTimeField { get; set; }

不过,EF Core 默认不支持直接使用数据注解来设置 SQL 表达式,需要通过 Fluent API 确认表达式。

方法三:在迁移中设置默认值

如果你已经启用了迁移功能,可以在迁移文件中修改字段定义,添加默认值:

生成迁移文件:

dotnet ef migrations add AddDefaultValueToDateTimeField

修改迁移文件中的字段定义:

migrationBuilder.AlterColumn<DateTime>(
    name: "YourDateTimeField",
    table: "YourTable",
    nullable: false,
    defaultValueSql: "CURRENT_TIMESTAMP");

应用迁移:

dotnet ef database update

方法四:在数据库脚本中直接配置

如果你想手动操作数据库,可以直接在 SQLite 表中设置默认值:

CREATE TABLE YourTable (
    Id INTEGER PRIMARY KEY AUTOINCREMENT,
    YourDateTimeField DATETIME DEFAULT CURRENT_TIMESTAMP
);

注意事项

数据类型:在 SQLite 中,时间字段通常使用 DATETIME 类型存储。 默认值生效范围:默认值仅在插入数据时未显式指定该字段值时生效。 时间格式:CURRENT_TIMESTAMP 返回的时间是 UTC 时间,如果需要本地时间,可以用 datetime('now', 'localtime')。

通过上述方法,你可以灵活地为时间字段设置默认值为当前时间。

更新于:9天前
赞一波!

文章评论

评论问答