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


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 命名空间)。

BlessAI BlessAI

Bless AI 提供五个独特的功能:每日问候、庆祝问候、祝福、祷告和名言的文本生成和图片生成。

BlessAI 135 查看详情 BlessAI

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

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模板生成实体的详细内容,更多请关注其它相关文章!


# 怎么处理  # 萝岗sem网站优化推广方案  # 重庆花艺网站建设  # 钦州网页seo  # 城口县河鱼乡网站建设  # 宿迁营销推广工作室  # SEO基础画画画教程  # 吴中推广seo怎么做  # 抖音搜索seo制作  # 台湾网络推广营销  # 如何做网红网站推广赚钱  # 中文网  # 相关文章  # 编码  # 如何实现  # 自动生成  # 实体类  # 遍历  # 代码生成器  # 主键  # c#  # 配置文件  # microsoft  # 工具  # app 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 胃动力不足?试试这5个调理方法  win11怎么设置默认终端为Windows Terminal Win11替代CMD和PowerShell【技巧】  掌握CSS :has() 选择器:父选择器、嵌套限制与常见陷阱解析  《撕歌》会员开通方法  在VS Code中利用AI辅助进行代码迁移  创客贴登录页面入口 创客贴网页版最新网址链接  Flexbox布局实践:实现底部页脚与顶部粘性导航条的完美结合  优化 React onClick 事件处理:函数引用与箭头函数的对比  c++20的指定初始化(Designated Initializers)怎么用_c++ C风格结构体初始化  《王者荣耀世界》英雄获取攻略  多闪电脑版下载_多闪PC端模拟器使用  在Django中动态检查模型关联:一种灵活的解决方案  Python csv 模块处理非字符串数据:列表写入 CSV 文件的机制解析  《原神》月之一版本新增书籍一览  J*a里如何处理ArithmeticException并防止除零_算术异常防护策略解析  Linux如何优化系统启动流程_Linux启动项优化方案  使用AI在VS Code中将代码从一种语言翻译成另一种  C++如何使用CMake构建项目_C++ CMakeLists.txt编写入门教程  被称为海蜈蚣的海洋动物是  win11如何运行chkdsk命令 Win11检查和修复磁盘逻辑错误教程【修复】  腾讯QQ邮箱官方入口 QQ邮箱网页版登录平台  向往的生活小游戏启动处_向往的生活小游戏立即启动  怎样设置开机后自动运行某个程序_Windows启动文件夹与任务计划【自动化】  TikTok私信无法发送表情怎么办 TikTok消息表情发送修复方法  lol小红书怎么|直播|?lol小红书|直播|是什么意思?  深入理解Python对象引用与链表属性赋值  《金山词霸》语音翻译方法  mysql镜像配置如何设置用户权限组_mysql镜像配置用户组与权限分级管理方法  OPPO手机参数配置如何开启护眼模式_OPPO手机参数配置护眼模式开启指南  Yandex世界探索 最新官方免登录入口全知道  c++如何实现一个简单的RPC框架_c++远程过程调用原理与实践  《雷电模拟器》自动点击设置方法  抖音火山版注销账号抖音会注销吗 抖音火山版与抖音账号注销关系  sublime怎么在文件中显示代码结构大纲_sublime符号列表功能  《腾讯相册管家》注销账号方法  C++中的explicit关键字有什么作用_C++类型转换控制与explicit使用  苹果手机怎么合并照片_苹果手机合并多张照片的操作方法  C++ priority_queue怎么用_C++优先队列底层实现与自定义比较器  如何在mysql中设计餐饮点餐系统_mysql点餐系统项目实战  《绿竹漫游》关闭消息通知方法  快递查询,一键速查  家里的小飞虫总是不断,用什么方法可以彻底根除?  Flash AS3.0简易相册制作  解决CSS background 属性中 cover 关键字的常见误用  VB表达式书写规则解析  秋风萧瑟洪波涌起中的萧瑟指的是什么  LINUX怎么查看显卡信息_LINUX查看GPU状态  Chart.js 教程:自定义插件实现图表与图例间距调整  VBA Outlook邮件自动化:高效集成Excel数据与列标题的策略  包子漫画官网链接官方地址 包子漫画在线观看官网首页入口 

 2025-12-15

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.