使用数据源
数据源,即定义数据库的元数据,也称之为 Schema,包括表、字段、关系等等。数据源是生成代码的原材料,必不可少。
CodeBuilder 支持 Database、 Power Designer、PDManer、DbSchema、Excel Schemanew 和 Swagger 六种。
一、从数据库读取
从主菜单【数据源】处打开【Database】,显示 【数据源管理】 界面,如下图:
CodeBuider 支持 SqlServer、MySql、Oracle、SQLite、PostgreSql、Firebird、达梦、人大金仓、神通,以及 Odbc 和 OleDb 驱动,此 Provider 基于 Fireasy.Data 提供 Schema,如果需要对接其他类型的数据库,你可以参阅 扩展数据源提供者。点击【添加】选择一种类型的数据库。
输入连接字符串,或是通过单击【向导】按钮打开向导界面,根据表单来输入数据库连接的参数。
配置好数据源后,在 数据源管理 的数据源列表中,双击打开数据库链接,将遍列数据库中的所有表。如下图:
通过关键字筛选,勾选需要生成的表,你可以【暂存】多次筛选结构,最后一起返回。通过【SQL构造器】,通过输入多条 SQL 语句,返回特殊的结构,如下图:
💡 如何读取视图
数据库视图默认是关闭的,如需读取视图,你可以在【文件】-【首选项】中勾选【读取视图】。
二、从 Power Designer 读取
从主菜单【数据源】处打开【Power Designer】,打开选择 Power Designer 设计文件的对话框,选择文件后打开,显示模型浏览器,如下图所示:
模型浏览器列出文档中的所有的 Package 和 Diagram 模型,以及 Table 对象,勾选好表对象后点击【确定】即可。
三、从 PDManer 读取
操作与 Power Designer 类似。
四、从 DbSchema 读取
操作与 Power Designer 类似。
五、从 Swagger 读取
可以读取一个 swagger 的 json 文件,从中解析出 Model,一般前端模板可以使用 Swagger 数据源。
六、从 Excel 中获取
如果连接不上数据库,或是暂不支持的数据库,可以将架构导出到 Excel 中,CodeBuilder 再从 Excel 中获取。
选择 Excel Schema 后选择一个 Excel 文件,将预载 Excel 的结构,在蓝色背景行中单击编辑,下拉选择数据表(Table开头)或字段(Column开头)的属性,如下:
设置好后点击【下一步】将列出所有表,勾选要生成的表即可,如下:
六、调整数据源
通过以上方法选择好数据源后,CodeBuilder 将读取所有表的字段信息,显示到【对象列表中】,如下图所示:
主键、外键和普通字段通过不同颜色的图标进行区分,同时,选中行并单击备注列,可以立即修改备注文本,回车即可生效。
2.9.3
版本支持拖拽调整表或字段的前后顺序。
当你选中表或字段时,在【属性】窗口实时显示表或字段的详细信息,在属性窗口里调整也会实时更新到【对象列表】中。如下图所示:
外键可以通过以下步骤打开【外键关联】窗口,选择主表及主键进行【绑定】,点击【解绑】取消关系,如下所示:
💡 多说两句
- 表的
ClassName
和字段的PropertyName
是通过一定的规则进行自动转换的,可查阅 使用变量 。 - 字段的
PropertyType
是依照DbType
枚举来映射的,可查阅 架构扩展,如果有类型转换错误,可定位到文件extensionsschemaase.cs
,或在【扩展】窗口中找到base.cs
,找到方法GetCSharpType
进行修改。代码如下:
// 获取 CSharp 的类型名称
public static string GetCSharpType(Column column)
{
var propertyType = column.PropertyType;
if (column.DbType == null)
{
return propertyType;
}
switch ((DbType)column.DbType)
{
case DbType.String:
case DbType.StringFixedLength:
case DbType.AnsiString:
case DbType.AnsiStringFixedLength:
propertyType = "string";
break;
case DbType.Int16:
propertyType = "short";
break;
case DbType.UInt16:
propertyType = "ushort";
break;
case DbType.Int32:
propertyType = "int";
break;
case DbType.UInt32:
propertyType = "uint";
break;
case DbType.Int64:
propertyType = "long";
break;
case DbType.UInt64:
propertyType = "ulong";
break;
case DbType.Decimal:
propertyType = "decimal";
break;
case DbType.Single:
propertyType = "float";
break;
case DbType.Double:
propertyType = "double";
break;
case DbType.Boolean:
propertyType = "bool";
break;
case DbType.Byte:
case DbType.SByte:
propertyType = column.Name.StartsWith("Is") ? "bool" : "int";
break;
case DbType.Date:
case DbType.DateTime:
case DbType.DateTime2:
case DbType.DateTimeOffset:
propertyType = "DateTime";
break;
case DbType.Guid:
propertyType = "Guid";
break;
case DbType.Binary:
propertyType = column.DataType == "timestamp" ? "DateTime" : "byte[]";
break;
}
if (column.IsNullable && propertyType != "string" && column.DbType != DbType.Binary)
{
propertyType += "?";
}
return propertyType;
}
而 Power Designer 数据源的 DbType
则是根据 configpd.cfg
文件来进行类型映射。如下所示:
{
"MYSQL": {
"smallint": "Int16",
"int": "Int32",
"real": "Double",
"single": "Single",
"float": "Double",
"double": "Double",
"money": "Decimal",
"currency": "Decimal",
"decimal": "Decimal",
"numeric": "Decimal",
"bit": "Boolean",
"yesno": "Boolean",
"logical": "Boolean",
"bool": "Boolean",
"boolean": "Boolean",
"tinyint": "Byte",
"integer": "Int64",
"counter": "Int64",
"autoincrement": "Int64",
"identity": "Int64",
"long": "Int64",
"bigint": "Int64",
"binary": "Binary",
"varbinary": "Binary",
"blob": "Binary",
"image": "Binary",
"general": "Binary",
"oleobject": "Binary",
"varchar": "String",
"nvarchar": "String",
"memo": "String",
"longtext": "String",
"note": "String",
"text": "String",
"ntext": "String",
"string": "String",
"char": "String",
"nchar": "String",
"datetime": "DateTime",
"smalldate": "DateTime",
"timestamp": "DateTime",
"date": "DateTime",
"time": "DateTime",
"uniqueidentifier": "Currency",
"guid": "Currency"
},
"MSSQLSRV": {
"smallint": "Int16",
"int": "Int32",
"real": "Single",
"float": "Double",
"money": "Decimal",
"smallmoney": "Decimal",
"bit": "Boolean",
"tinyint": "Byte",
"bigint": "Int64",
"timestamp": "Binary",
"binary": "Binary",
"image": "Binary",
"text": "String",
"ntext": "String",
"decimal": "Decimal",
"numeric": "Decimal",
"datetime": "DateTime",
"smalldatetime": "DateTime",
"sql_variant": "Object",
"xml": "String",
"varchar": "String",
"char": "String",
"nchar": "String",
"nvarchar": "String",
"varbinary": "Binary",
"uniqueidentifier": "String",
"date": "DateTime",
"time": "Object",
"datetime2": "DateTime",
"datetimeoffset": "Object"
},
"ORA": {
"bfile": "Binary",
"blob": "Binary",
"char": "String",
"clob": "String",
"date": "DateTime",
"float": "Decimal",
"interval day to second": "Object",
"interval year to month": "Int32",
"long": "String",
"integer": "Int32",
"long raw": "Binary",
"nchar": "String",
"nclob": "String",
"number": "Decimal",
"nvarchar2": "String",
"raw": "Binary",
"rowid": "String",
"timestamp": "DateTime",
"timestamp with local time zone": "DateTime",
"timestamp with time zone": "DateTime",
"varchar2": "String"
}
}
如果你需要配置其他类型的数据库,需要找到 Power Designer 的 pdm
文件中的路径 //Model/o:RootObject/c:Children/o:Model/c:DBMS/o:DBMS/a:Code
,根据 Code 的值来进行配置。
附
编码 | 类型 | 名称 |
---|---|---|
Index | int | 索引,从 1 开始 |
Name | string | 表的名称 |
Description | string | 表的注释 |
ClassName | string | 生成的对应的类名 |
Columns | List<Column> | 字段集合 |
PrimaryKeys | List<Column> | 主键集合 |
ForeignKeys | List<Reference> | 外键集合,可遍列主表 |
SubKeys | List<Reference> | 子键集合,可遍列子表 |
UniqueKeys | List<Column> | 唯一键集合3.3 |
字段 Column
的基本元素:
编码 | 类型 | 名称 |
---|---|---|
Index | int | 索引,从 1 开始 |
Name | string | 字段的名称 |
Description | string | 字段的注释 |
ColumnType | string | 字段类型定义,如 varchar(20)、integer、decimal(20,2) 等等 |
DataType | string | 字段类型,如 varchar、ingeter、decimal 等等 |
DbType | DbType? | 对应到 System.Data.DbType 枚举 |
PropertyName | string | 生成的对应的属性名称 |
PropertyType | string | 属性的类型,比如 C# 的 string、DateTime、int? 等等 |
IsPrimaryKey | boolean | 是否是主键 |
AutoIncrement | boolean | 是否为自增 |
IsNullable | boolean | 是否可为空 |
ForeignKey | Reference | 对应的外键对象 (Reference) |
Length | int? | 字段长度,如 varchar(20) 长度为 20 |
Precision | int? | 精度 |
Scale | int? | 小数位数 |
IsUniqueKey | boolean | 是否唯一键3.3 |
Charset | string | 字符集3.4 |
Collation | string | 排列规则3.4 |
ChangeDetails | List<ChangedProperty> | 变更明细3.4 |
关系 Reference
的基本元素:
编码 | 类型 | 名称 |
---|---|---|
PkTable | Table | 主表 |
PkColumn | Column | 主键 |
FkTable | Table | 关联的表 |
FkColumn | Column | 关联的字段 |
OnUpdate | Constraint | 更新时的级联行为 |
OnDelete | Constraint | 删除时的级联行为 |