CodeGen 代码生成模块
FreeKit.CodeGen 是一个数据库逆向 + 模板渲染的代码脚手架工具:读取已有数据库的表结构(FreeSql DbFirst),结合 Razor/Scriban 模板,批量生成实体、控制器、应用服务等代码,减少样板代码编写。配套提供 FreeKit.CodeGen.UI(前端可视化界面)与 FreeKit.CodeGen.Host(独立宿主)。
功能概览
| 功能 | 说明 |
|---|---|
| 数据库读取 | 通过 FreeSql DbFirst 逆向表结构、列、类型 |
| 模板引擎 | Razor 模板 + Scriban,可自定义生成结果 |
| 配置持久化 | 数据源连接(DbConfig)、模板(Template)、生成任务(TaskBuild)存于本地 SQLite |
| 命名策略 | 支持大驼峰/小驼峰/下划线等多种命名转换(NameOptions) |
| 鉴权 | 内置 JWT、加解密服务,保护生成接口 |
架构
FreeKit.CodeGen/
├── CodeGenServiceExtensions.cs # 服务注册入口(AddCodeGen)
├── RazorModel.cs # 模板上下文模型(表/列/命名工具)
├── DbConfigs/ # 数据源连接配置
├── Templates/ # 模板管理
└── TaskBuilds/ # 生成任务(DbConfig/Template 关联)
注册与存储
AddCodeGen 完成全部注册,并使用本地 SQLite(codegen.db,可用 ConnectionStrings:CodeGen 覆盖)保存配置与模板:
// Program.cs(CodeGen.Host)
builder.Services.AddCodeGen(builder.Configuration);
注册内容包括:
services.AddCurrentUser();
// 本地 SQLite 存储配置/模板
var fsql = new FreeSqlBuilder()
.UseConnectionString(DataType.Sqlite, connectionString)
.UseAutoSyncStructure(true)
.Build();
services.AddSingleton(fsql);
services.AddFreeRepository(typeof(RazorModel).Assembly);
services.AddScoped<IDbConfigService, DbConfigService>();
services.AddScoped<ITemplateService, TemplateService>();
services.AddScoped<ITaskBuildService, TaskBuildService>();
services.AddHashService();
services.AddCryptographyService(/* key */);
services.AddJwtService();
services.AddTemplateEngines(); // Razor / Scriban
模板上下文(RazorModel)
模板通过 RazorModel 访问数据库元数据与命名工具:
| 成员 | 说明 |
|---|---|
table / columns | 当前表信息与列集合(DbTableInfo / DbColumnInfo) |
tables | 全部表列表 |
NameSpace | 目标命名空间 |
GetCsName(name) | 按 NameOptions 转换 C# 名称 |
GetCsType(col) | 列类型 → C# 类型(含 MySQL 枚举/集合特判) |
GetTableAttribute() | 生成 [Table(...)] 特性 |
GetColumnAttribute(col) | 生成 [Column(...)] 特性(长度/主键/自增等) |
示例模板片段(生成实体属性):
public class @Model.GetCsName(Model.table.Name)
{
@foreach (var col in Model.columns)
{
var attr = Model.GetColumnAttribute(col);
if (attr != null) { <text> @attr
</text> }
<text> public @Model.GetCsType(col) @Model.GetCsName(col.Name) { get; set; }
</text>
}
}
使用流程
- 启动
FreeKit.CodeGen.Host,打开FreeKit.CodeGen.UI。 - 在
DbConfig中配置目标数据库连接(MySQL / Sqlite 等)。 - 选择或编写
Template(如「实体模板」「Controller 模板」)。 - 创建
TaskBuild,关联数据源与模板,执行生成。 - 将产物拷贝到业务模块项目,按需调整。
与 BuildingBlocks CLI 的区别
| 工具 | 定位 |
|---|---|
FreeKit.CodeGen | 基于已有数据库逆向生成,可视化、模板可配 |
IGeekFan.FreeKit.CLI | 基于实体定义正向生成全套代码(见 CLI) |