在我的 Blazor Server 应用程序中,我使用 EF Core 和 Npgsql 来以数据库优先方式搭建我的 DbContext 和模型类。当我设置它时,我遵循了 Npgsql 的建议并选择了 NodaTime。这意味着我安装了这些 NuGet 包:Npgsql.EntityFrameworkCore.PostgreSQL、Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime、Npgsql.NodaTime
我会为脚手架运行此命令:
dotnet ef dbcontext scaffold [connection-string-redacted] Npgsql.EntityFrameworkCore.PostgreSQL ...
现在我认为NodaTime对于我的具体情况来说太过分了,尽管我完全理解它存在的原因以及它解决的众多问题。我想改为使用 .NET 本机类型(又名 System.DateTime)。
所以我的第一次尝试是注释掉 Program.cs 中我将 Npgsql 配置为使用 NodaTime 的行:
builder.Services
.AddDbContextFactory<TheDbContext>(options =>
{
options.UseNpgsql(dbConnection, conf =>
{
//conf.UseNodaTime();
conf.EnableRetryOnFailure();
conf.CommandTimeout(2);
});
});
在此更改后运行脚手架仍然会为 timestamp 类型的 Postgres 列生成 NodaTime 类 (NodaTime.LocalDateTime)。
我需要做什么才能让 cli 脚手架停止使用 NodaTime?
事实证明 cli 脚手架并不关心 Program.cs 中配置的内容。它依赖于项目中安装的 NuGet 包。只要仍然安装了Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime,脚手架就会使用NodaTime。即使我没有在 cli 命令中明确指定它(它只有 Npgsql.EntityFrameworkCore.PostgreSQL)。
修复方法是从项目中卸载 NuGet 包 Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime。然后脚手架生成所需的 .NET Native 类型(又名 System.DateTime)。