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

如何让EF Core脚手架复数化更“直白”?避免Person生成People

EF Core脚手架生成DbSet命名问题

我现有一个数据库,使用如下命令进行EF Core脚手架生成:

dotnet ef dbcontext scaffold "Data Source=xxx;Initial Catalog=xxx;User ID=xxx;Password=xxx;Trust Server Certificate=True" 
       Microsoft.EntityFrameworkCore.SqlServer 
       --use-database-names --context DatabaseContext   
       --context-dir DataGenerated --output-dir ModelsGenerated 
       --no-onconfiguring --force

数据库包含Car、Dog、Person三张表,生成后得到:

  • public virtual DbSet<Car> Cars { get; set; } - 符合预期
  • public virtual DbSet<Dog> Dogs { get; set; } - 符合预期
  • public virtual DbSet<Person> People { get; set; } - 不符合预期,希望得到Persons而非People

请问是否有参数或开关可以解决此问题,无需深入修改模板或手动调整?


解决方案

EF Core的dotnet ef dbcontext scaffold命令目前没有单独控制单个DbSet复数命名的参数,但有两种无需修改模板或手动调整的全局方式解决:

  1. 添加--no-pluralize开关
    你当前使用的--use-database-names仅控制实体类名沿用表名,但DbSet命名仍会走EF Core内置的英文复数化规则(比如Person被转为People)。添加--no-pluralize后,DbSet会直接采用实体类名加s的简单复数形式,刚好能让Person对应Persons,同时Car、Dog对应的DbSet仍保持Cars、Dogs,完全符合你的需求。

    修改后的命令:

    dotnet ef dbcontext scaffold "Data Source=xxx;Initial Catalog=xxx;User ID=xxx;Password=xxx;Trust Server Certificate=True" 
           Microsoft.EntityFrameworkCore.SqlServer 
           --use-database-names --context DatabaseContext   
           --context-dir DataGenerated --output-dir ModelsGenerated 
           --no-onconfiguring --force --no-pluralize
    
  2. 调整数据库表名(若允许)
    如果数据库结构可以修改,将Person表改名为Persons,结合--use-database-names参数,EF Core会自动生成public virtual DbSet<Person> Persons { get; set; }。这种方式适合允许调整数据库的场景。

如果仅需针对单个实体调整DbSet命名且不想全局禁用复数化,才需要修改脚手架模板或手动调整代码,但就你的需求而言,--no-pluralize是最直接的解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:47:21