如何在DB Scaffold生成模型时保留数据库属性名且模型名用帕斯卡命名?
解决Scaffold生成模型时属性名匹配数据库、模型名保留帕斯卡命名的问题
核心需求
生成的模型类名保持帕斯卡命名(如AkTable),但属性名严格与数据库列名一致(如ModifON),避免--use-database-names参数同时修改模型名的问题。
解决方案
方法1:自定义EF Core反向工程命名服务(推荐)
通过自定义命名规则,让模型名按帕斯卡命名生成,属性名直接复用数据库列名:
- 创建
ReverseEngineeringConfiguration.cs文件,实现自定义命名逻辑:
using Microsoft.EntityFrameworkCore.Design; using Microsoft.EntityFrameworkCore.Scaffolding; using System.Text.RegularExpressions; public class CustomNamingService : INamingService { // 处理表名:移除前缀ak_,转换为帕斯卡命名 public string ConvertToClassName(string tableName, string? schemaName) { var cleanedTableName = Regex.Replace(tableName, @"^ak_", "", RegexOptions.IgnoreCase); return ToPascalCase(cleanedTableName); } // 属性名直接使用数据库列名,不做大小写调整 public string ConvertToPropertyName(string columnName) { return columnName; } // 辅助方法:将字符串转为帕斯卡命名 private string ToPascalCase(string input) { if (string.IsNullOrEmpty(input)) return input; return char.ToUpper(input[0]) + input.Substring(1); } } // 注册自定义命名服务 public class ReverseEngineeringDesignTimeServices : IDesignTimeServices { public void ConfigureDesignTimeServices(IServiceCollection services) { services.AddSingleton<INamingService, CustomNamingService>(); } }
- 执行Scaffold命令(无需加
--use-database-names):
Scaffold-DbContext "你的数据库连接字符串" Microsoft.EntityFrameworkCore.SqlServer -Tables ak_Table
执行后生成的AkTable类会自动使用ModifON作为属性名,模型名保持帕斯卡格式。
方法2:生成后手动修改(临时快速方案)
如果仅涉及少量字段,生成模型后直接修改属性名即可:
public class AkTable { // 其他属性... public string ModifON { get; set; } // 替换自动生成的ModifOn为数据库列名 }
EF Core会自动匹配与数据库列名完全一致的属性,无需额外添加[Column]注解。
内容的提问来源于stack exchange,提问作者Nixx
相关产品推荐
相关产品推荐

