常见问题
😟 我的表名是小写,但是生成的类名想用帕斯卡命名,该怎么弄?
CodeBuilder 支持命名的转换,在【变量】窗口中,有一个 TableNamingMode
可以切换为生成帕斯卡的命名,同时字段也是支持的,字段的命名转换是 ColumnNamingMode
。只要切换为 Pascal
就可以了。
另外,你也可以定义更多的转换规则,该枚举是在 extensionscommonase.cs
里定义的。转换方法定义在 extensionsschemaase.cs
的 ClassNameInitializer
和 PropertyNameInitializer
类里。
[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 Designer
或 PDManer
则自行调整,方法如下:
(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.GetCSharpType
、 SchemaHelper.GetJavaType
或 SchemaHelper.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 = "??";
}
}
}