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

使用EF Core从PostgreSQL生成DbContext时如何禁用NodaTime?

解决EF Core脚手架持续生成NodaTime类型的问题

要让数据库优先的脚手架工具改用.NET原生类型(如System.DateTime),需按以下步骤操作:

  1. 卸载NodaTime相关NuGet包
    Npgsql的EF Core脚手架会自动检测项目中是否安装了Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime包——只要这个包存在,就会默认把PostgreSQL的timestamp等类型映射为NodaTime类型。需要卸载以下两个包:

    • Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime
    • Npgsql.NodaTime(如果项目中没有其他地方依赖它)

    执行命令卸载:

    dotnet remove package Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime
    dotnet remove package Npgsql.NodaTime
    
  2. 彻底移除DbContext配置中的NodaTime代码
    把Program.cs里原本的UseNodaTime()调用(包括注释掉的)完全删除,确保配置干净:

    builder.Services.AddDbContextFactory<TheDbContext>(options =>
    {
        options.UseNpgsql(dbConnection, conf =>
        {
            conf.EnableRetryOnFailure();
            conf.CommandTimeout(2);
        });
    });
    
  3. 清理缓存后重新执行脚手架命令
    先清理项目构建缓存,避免残留配置干扰:

    dotnet clean
    

    再重新运行脚手架生成命令,此时Npgsql会默认映射到.NET原生类型:

    dotnet ef dbcontext scaffold [connection-string-redacted] Npgsql.EntityFrameworkCore.PostgreSQL ...
    
  4. (可选)批量修正已生成的模型
    如果之前已经生成了带NodaTime类型的模型类,可以批量替换:

    • 将NodaTime.LocalDateTime替换为System.DateTime(对应PostgreSQL的timestamp类型)
    • 将NodaTime.ZonedDateTime替换为System.DateTimeOffset(对应PostgreSQL的timestamp with time zone类型)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:27:27