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

如何让EF6数据库优先迁移生成遵循C#帕斯卡命名约定的类?

当然可以实现!

数据库优先模式下,Entity Framework 6完全支持让生成的实体类和属性遵循C#的帕斯卡命名法(PascalCase),我给你两个最实用的方案:

方案一:修改TT模板实现自动命名转换(推荐)

EF6数据库优先生成代码时,默认使用TT(T4)模板来生成类和属性。我们可以修改模板里的命名逻辑,让它自动把数据库的下划线/小写命名转换成帕斯卡命名:

  1. 打开你的EDMX文件,右键空白区域,选择添加代码生成项
  2. 在弹出的对话框里,切换到「数据」分类,选择EF 6.x DbContext Generator(如果没找到这个选项,先安装NuGet包 EntityFramework.CodeTemplates.CSharp)
  3. 添加后,项目里会多出两个.tt文件:[你的模型名].Context.tt 和 [你的模型名].tt
  4. 打开[你的模型名].tt文件,做以下修改:
    • 首先在模板开头添加一个自定义的命名转换函数:
      string ToPascalCase(string input)
      {
          if (string.IsNullOrWhiteSpace(input))
              return input;
          // 处理下划线分隔的命名,比如user_info → UserInfo
          var parts = input.Split(new[] {'_', ' '}, StringSplitOptions.RemoveEmptyEntries);
          return string.Concat(parts.Select(part => char.ToUpper(part[0]) + part.Substring(1).ToLower()));
      }
      
    • 找到生成实体类名的代码行(大概在foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))循环里),把原来的<#=code.Escape(entity)#>替换成<#=ToPascalCase(code.Escape(entity))#>
    • 再找到生成属性名的代码行(在foreach (var edmProperty in entity.Properties.Where(p => p.TypeUsage.EdmType is PrimitiveType && p.DeclaringType == entity))循环里),把<#=code.Escape(edmProperty)#>替换成<#=ToPascalCase(code.Escape(edmProperty))#>
  5. 保存模板后,EF会自动重新生成代码,这时你会看到所有类和属性都变成了帕斯卡命名格式!

这个方案的好处是一劳永逸——以后每次从数据库更新模型,代码都会自动按帕斯卡命名生成,不用手动修改。

方案二:手动修改EDMX中的实体/属性名称(适合小项目)

如果你的项目规模不大,也可以直接在EDMX设计器里修改实体和属性的名称:

  • 打开EDMX设计器,选中要修改的实体(比如数据库表user_info生成的实体),在属性窗口里把「名称」改成UserInfo
  • 选中每个属性(比如user_id),在属性窗口里把「名称」改成UserId
  • 修改完成后,右键EDMX文件选择「生成数据库上下文」,生成的代码就会用你修改后的帕斯卡命名了

不过这个方案的缺点是,每次从数据库更新模型时,修改的名称会被覆盖,需要重新调整,所以只适合模型很少变动的项目。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:26:11