常见问题


😟 我的表名是小写,但是生成的类名想用帕斯卡命名,该怎么弄?

  CodeBuilder 支持命名的转换,在【变量】窗口中,有一个 TableNamingMode 可以切换为生成帕斯卡的命名,同时字段也是支持的,字段的命名转换是 ColumnNamingMode。只要切换为 Pascal 就可以了。

  另外,你也可以定义更多的转换规则,该枚举是在 extensionscommonase.cs 里定义的。转换方法定义在 extensionsschemaase.csClassNameInitializerPropertyNameInitializer 类里。

[SchemaInitializer(typeof(Table))]
public class ClassNameInitializer : ISchemaInitializer
{
    public void Initialize(dynamic profile, dynamic schema)
    {
        var table = schema as Table;
        var tableName = table.Name;

        // Pascal 命名
        if (profile.TableNamingMode == NamingMode.Pascal)
        {
            table.ClassName = SchemaHelper.PascalFormat(tableName); //注意看该方法
        }
        else
        {
            table.ClassName = tableName;
        }
    }
}

😟 生成出来的属性类型不对,该如何调整?

  要分两种情况来看:

1、DbType 未正确映射

  在字段架构里有一个 DbType 枚举,它表明了字段的类型。首选确定此值是否与数据库结构一致,如果不一致,针对不同的采取不同的方法。如果使用 Database 提供的数据源,则需要反馈给我进行修复。如果使用 Power DesignerPDManer 则自行调整,方法如下:

(1) Power Designer

  打开 configpd.cfg 文件,调整数据库数据类型与 DbType 的映射关系。该文件仅配置了 MYSQL、MSSQLSRV 和 ORA 三种数据库,其他的数据库你也可以举一反三,根据 *.pdm 文件中的 XML 节点获取此匹配值: //Model/o:RootObject/c:Children/o:Model/c:DBMS/o:DBMS/a:Code

(2) PDManer

  打开 configpdman.cfg 文件,调整类型与 DbType 的映射关系。它是通过 *.json 文件里的 dataTypeMapping:mappings 进行映射的,注意看,mappings下的每一个 guid 对应到 profile:dataTypeSupports 所配置的数据库标识。

2、DbType 未映射到不同程序语言的数据类型

  由 DbType 转换程序语言的类型是通过 extensionsschemaase.cs 文件里的 SchemaHelper.GetCSharpTypeSchemaHelper.GetJavaTypeSchemaHelper.GetVBType 等方法来提供的,如果你发现转换的不对,可自行调整。如果要增加其他语言的转换,可以自行添加,在 PropertyNameInitializer 里做相应的判断即可。

[SchemaInitializer(typeof(Column))]
public class PropertyTypeInitializer : ISchemaInitializer
{
    public void Initialize(dynamic profile, dynamic schema)
    {
        var column = schema as Column;
        if (profile.Language == Language.CSharp)
        {
            column.PropertyType = SchemaHelper.GetCSharpType(column);
        }
        else if (profile.Language == Language.Java)
        {
            column.PropertyType = SchemaHelper.GetJavaType(column);
        }
        else if (profile.Language == Language.VB)
        {
            column.PropertyType = SchemaHelper.GetVBType(column);
        }
        else
        {
            column.PropertyType = "??";
        }
    }
}