跳到主要内容

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>
}
}

使用流程

  1. 启动 FreeKit.CodeGen.Host,打开 FreeKit.CodeGen.UI
  2. DbConfig 中配置目标数据库连接(MySQL / Sqlite 等)。
  3. 选择或编写 Template(如「实体模板」「Controller 模板」)。
  4. 创建 TaskBuild,关联数据源与模板,执行生成。
  5. 将产物拷贝到业务模块项目,按需调整。

与 BuildingBlocks CLI 的区别

工具定位
FreeKit.CodeGen基于已有数据库逆向生成,可视化、模板可配
IGeekFan.FreeKit.CLI基于实体定义正向生成全套代码(见 CLI

相关文档