Dapper怎么实现一个简单的ORM代码生成器 Dapper T4模板生成实体

畫卷琴夢
发布: 2025-12-15 06:59:34
原创
474人浏览过
Dapper 配合 T4 模板可基于数据库元数据(如 sys.tables/sys.columns)自动生成 C# 实体类,支持类型映射、主键识别、空值判断及 Dapper 特性标注,轻量可控且可定制。

dapper怎么实现一个简单的orm代码生成器 dapper t4模板生成实体

用 Dapper 配合 T4 模板生成实体类,核心是利用数据库元数据(如 INFORMATION_SCHEMA 或系统视图)+ T4 的文本生成能力,自动生成与表结构一一对应的 C# 实体类。它不依赖第三方 ORM 代码生成器,轻量、可控、可定制。

准备数据库连接和元数据查询

在 T4 模板中需要能访问数据库,获取表名、列名、数据类型、是否为空、主键等信息。推荐用 SQL Server 的 sys.tablessys.columns 查询(其他数据库类似):

  • SqlConnection 连接数据库(T4 中支持 System.Data.SqlClientMicrosoft.Data.SqlClient
  • 执行类似下面的 SQL 获取字段信息(含类型映射、是否主键、是否自增等):
SELECT t.name AS TableName, c.name AS ColumnName, ty.name AS SqlType, c.max_length, c.precision, c.scale, c.is_nullable, c.is_identity, ISNULL(pk.is_primary_key, 0) AS IsPrimaryKey FROM sys.tables t INNER JOIN sys.columns c ON t.object_id = c.object_id INNER JOIN sys.types ty ON c.user_type_id = ty.user_type_id LEFT JOIN (SELECT object_id, column_id, 1 as is_primary_key FROM sys.index_columns ic INNER JOIN sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id WHERE i.is_primary_key = 1) pk ON c.object_id = pk.object_id AND c.column_id = pk.column_id WHERE t.is_ms_shipped = 0 ORDER BY t.name, c.column_id

编写基础 T4 模板(.tt 文件)

新建一个 Models.tt 文件,顶部添加连接字符串和引用:

模板主体遍历表 → 遍历字段 → 生成属性,注意处理 SQL 类型到 C# 类型的映射(如 int, string, DateTime?, bool?),并加 [Column][Key] 等 Dapper 常用特性(需引入 Dapper 命名空间)。

Blackink AI纹身生成
Blackink AI纹身生成

创建类似纹身的设计,生成独特纹身

Blackink AI纹身生成 80
查看详情 Blackink AI纹身生成

类型映射与特性标注(关键细节)

SQL Server 类型转 C# 类型不能只看名字,要结合精度、长度、空值判断:

  • varchar(n)/nvarchar(n)string(n ≤ 4000 通常不加 [StringLength];若需校验可按需加)
  • bitbool?(因可能为 NULL)或 bool(配合 ISNULL(col,0) 查询时)
  • datetime/datetime2DateTime?
  • int/bigintint?/long?(主键且 is_identity=1 可标 [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
  • 所有字段加 [Column("ColumnName")],确保 Dapper 映射时不依赖命名约定

生成后自动保存为 .cs 文件(可选增强)

T4 默认输出到一个文件,但通常希望每张表一个实体类。可用 配合循环内多次调用 this.GenerationEnvironment 并写入不同文件(需启用 hostspecific="true"):

  • File.WriteAllText(Host.ResolvePath($"{tableName}.cs"), content); 单独保存(需添加
  • 注意:VS 中 T4 不支持直接写多文件,需配合自定义生成逻辑或改用 MSBuild + TextTransform 工具
  • 更稳的方式:生成一个包含所有实体的 Models.generated.cs,再手动拆分或用脚本后处理

基本上就这些。T4 + Dapper 实体生成不复杂但容易忽略类型空值判断和主键识别逻辑,跑通一次后可封装成公司内部模板,配合 CI 自动更新实体。

以上就是Dapper怎么实现一个简单的ORM代码生成器 Dapper T4模板生成实体的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号