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

如何在DB Scaffold生成模型时保留数据库属性名且模型名用帕斯卡命名?

解决Scaffold生成模型时属性名匹配数据库、模型名保留帕斯卡命名的问题

核心需求

生成的模型类名保持帕斯卡命名(如AkTable),但属性名严格与数据库列名一致(如ModifON),避免--use-database-names参数同时修改模型名的问题。

解决方案

方法1:自定义EF Core反向工程命名服务(推荐)

通过自定义命名规则,让模型名按帕斯卡命名生成,属性名直接复用数据库列名:

  1. 创建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>();
    }
}
  1. 执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:09:27