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

ASP.NET Core下EF Core Code First如何获取SQL Server当前时间

在ASP.NET Core EF Core Code First中获取SQL Server当前时间的方法

下面是几种实用的实现方式,覆盖建表默认值、直接查询SQL时间、LINQ中调用SQL函数等场景:

1. 建表时设置默认值(自动填充SQL时间)

如果希望实体新增时自动获取SQL Server的当前时间,可以在Code First的实体配置中,给对应属性设置SQL默认值GETDATE():

实体类定义

public class MyEntity
{
    public int Id { get; set; }
    // 新增时自动填充SQL服务器时间
    public DateTime CreateTime { get; set; }
    // 其他业务属性
}

DbContext配置

在OnModelCreating方法中配置属性的默认值SQL:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<MyEntity>()
        .Property(e => e.CreateTime)
        .HasDefaultValueSql("GETDATE()");
}

这样当你新增MyEntity实例且不赋值CreateTime时,SQL Server会自动用当前时间填充该字段。

如果需要每次更新实体时自动刷新时间,可以改用计算列:

modelBuilder.Entity<MyEntity>()
    .Property(e => e.LastUpdateTime)
    .HasComputedColumnSql("GETDATE()");

2. 直接查询SQL Server当前时间

如果你需要在业务代码中主动获取SQL Server的当前时间,可以直接执行SQL查询:

// EF Core 3.0+ 使用SqlQuery
var currentSqlTime = _context.Database.SqlQuery<DateTime>("SELECT GETDATE()").FirstOrDefault();

// 旧版本(EF Core 2.x)使用FromSql
var currentSqlTime = _context.Set<DateTime>().FromSql("SELECT GETDATE()").FirstOrDefault();

3. 在LINQ查询中调用SQL的GETDATE()函数

可以把SQL的GETDATE()映射成EF Core可识别的方法,这样就能在LINQ查询中直接使用:

步骤1:在DbContext中定义函数

public class MyDbContext : DbContext
{
    // 映射SQL的GETDATE()函数
    [DbFunction("GETDATE", "")]
    public static DateTime GetSqlServerCurrentTime()
    {
        // 仅用于EF Core查询翻译,实际不会执行
        throw new NotImplementedException();
    }

    // DbSet和其他配置...
}

步骤2:注册函数

在OnModelCreating中注册该函数:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.HasDbFunction(() => MyDbContext.GetSqlServerCurrentTime());
}

步骤3:在LINQ中使用

现在可以直接在LINQ查询里调用,EF Core会自动翻译成SQL的GETDATE():

var recentEntities = _context.MyEntities
    .Where(e => e.CreateTime >= MyDbContext.GetSqlServerCurrentTime().AddDays(-7))
    .ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:52:24