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

如何关闭EF Core Database-First脚手架将PostgreSQL表名自动翻译为德语的行为?

解决EF Core Scaffold自动翻译表名的问题

这个问题是EF Core脚手架工具默认启用了单复数转换,而你的系统区域性是德语,所以工具把masterdata识别成德语名词的复数形式,自动转成了单数Masterdatum。要关闭这个行为,最直接的方法是在scaffold命令中添加参数禁用复数化:

方法1:在命令中添加--no-pluralize参数

修改你的脚手架命令,加上--no-pluralize选项,这样就会完全关闭自动单复数转换,表名将直接按照帕斯卡命名规则生成(首字母大写,其余保持原表名的拼写):

dotnet ef dbcontext scaffold "Host=xxx;Database=xxx;Username=xxx;Password=xxx" Npgsql.EntityFrameworkCore.PostgreSQL -o Models -f --no-pluralize

执行这个命令后,生成的实体类会是Masterdata,对应的Fluent API配置也会是modelBuilder.Entity<Masterdata>(entity => { entity.ToTable("masterdata"); ...,和你的表名完全对应。

方法2:自定义复数化逻辑(进阶)

如果需要更灵活的控制,而不是完全禁用,你可以实现自定义的IPluralizer接口,让EF Core按照你想要的规则处理表名:

  1. 在你的项目中添加一个类,实现Microsoft.EntityFrameworkCore.Design.IPluralizer接口:
using Microsoft.EntityFrameworkCore.Design;

public class NoopPluralizer : IPluralizer
{
    // 单数转复数:直接返回原名称
    public string Pluralize(string name) => name;
    // 复数转单数:直接返回原名称
    public string Singularize(string name) => name;
}
  1. 在项目的DesignTimeDbContextFactory或者通过设计时服务注册这个自定义实现(如果没有工厂类,需要先创建)。不过这个方法比直接加参数繁琐,所以更推荐第一种方案。

为什么会出现这个问题?

EF Core的脚手架工具默认会根据当前系统的CultureInfo(你的系统是德语)来执行名词的单复数转换。对于masterdata这个表名,工具可能将其识别为德语中Masterdatum的复数形式(德语中Datum的复数是Daten,工具可能做了近似匹配),因此自动转换为单数形式的实体类名称。关闭复数化后,工具就不会做这个转换了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 07:37:44