T4模板根据数据库表和列的Description生成代码的summary的终极解决方案
相信很多人都用T4模版生成代码,用T4模版生成标准代码真的很方便。我们经常根据表生成相关的代码, 但是估计很多人都遇见过同一个问题, 特别是我们在生成model的时候,代码中model中的Summary一直无法生成。这个问题也困扰了我很久,也找了很多方案,一直没有更好的方法。问题如下:
解决方案
为了生成summary需要额外的增加一个类,并在T4模版中引用这个类即可。这个类的作用是根据表名和列名提取数据表中列的description。
1. 首先查询数据库中所有表和列的基本信息
为了方便起见,我在数据库中创建了一个视图,视图结构如下:
sql 脚本如下:
SELECT TOP (100) PERCENT COALESCE (T.name, OBJECT_NAME(C.object_id)) AS TableName, TB.TableDESC,
C.name AS ColumnName, TYPE_NAME(C.user_type_id) AS DataType, D.definition AS DefaultSetting,
C.is_nullable AS IsNullable, C.max_length AS MaxLength, COLUMNPROPERTY(C.object_id, C.name, 'PRECISION')
AS Precision, P.value AS ColumnDESC
FROM sys.columns AS C LEFT OUTER JOIN
sys.table_types AS T ON T.type_table_object_id = C.object_id LEFT OUTER JOIN
sys.default_constraints AS D ON C.object_id = D.parent_object_id AND
D.parent_column_id = C.column_id LEFT OUTER JOIN
sys.extended_properties AS P ON (P.major_id = C.object_id OR
P.major_id = T.user_type_id) AND P.minor_id = C.column_id AND P.name = 'MS_Description' LEFT OUTER JOIN
(SELECT INFORMATION_SCHEMA.TABLES.TABLE_NAME AS TableName, P.value AS TableDESC
FROM INFORMATION_SCHEMA.TABLES LEFT OUTER JOIN
sys.extended_properties AS P ON
OBJECT_ID(INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA + '.' + INFORMATION_SCHEMA.TABLES.TABLE_NAME)
= P.major_id AND P.minor_id = 0
WHERE (INFORMATION_SCHEMA.TABLES.TABLE_TYPE = 'BASE TABLE')) AS TB ON COALESCE (T.name,
OBJECT_NAME(C.object_id)) = TB.TableName
WHERE (COALESCE (SCHEMA_NAME(T.schema_id), OBJECT_SCHEMA_NAME(C.object_id)) = 'dbo')
ORDER BY TableName
2.在代码中计算description
3.T4模版调用
前面已经创建了一个类,这个类很简单,就是根据表名和列名获取对应的description。现在只要在T4模版中引用这个类即可。代码中要注意两点。直接上代码:
1. 必须要在T4模板的头部引用上面类的dll,否则无法引用命名空间。我用的是相对路径。其中$(SolutionDir)表示的solution所在的文件夹。
2.引用命名空间,下图中红线部分2行
在T4模板中直接调用方法即可,这样就可以根据表个列表获取到相应的description作为类的summary了。
这里提到一点,T4模版的代码中这个我用了一个replace,是因为我在写列描述的时候有换行,所以我把数据库中的换行转换成了summary中的换行,效果如下:
生成的代码的demo
跟大家提供几个生成代码的截图吧,怎么样所有的summary都已经根据数据库生成出来了吧
总结
个人认为这个方法是最简单的方法也是最有效的了,应该没有比这个在简单了。欢迎大家拍砖
T4模板根据数据库表和列的Description生成代码的summary的终极解决方案的更多相关文章
- EntityFramework Core 2.x (ef core) 在迁移中自动生成数据库表和列说明
在项目开发中有没有用过拼音首字母做列名或者接手这样的项目? 看见xmspsqb(项目审批申请表)这种表名时是否有一种无法抑制的想肛了取名的老兄的冲动? 更坑爹的是这种数据库没有文档(或者文档老旧不堪早 ...
- Mysql 数据库 表中列的操作
[1]Mysql数据库中表的列操作 Mysql中关于表中列的操作集语句: -- [1]增加一列 ) DEFAULT NULL COMMENT '目的码区号'; -- [2]增加一列,在dnis_are ...
- SQL 数据库表标识列初始化 DBCC
把ArimaIndexForecastModel这张表的标识列重置为0,前提是这张表执行过删除操作 示例: dbcc checkident('ArimaIndexForecastModel',res ...
- SQL Server 查询数据库表的列数
select count(*) from sysobjects a join syscolumns b on a.id=b.id where a.name='表名' go
- 阶段3 1.Mybatis_12.Mybatis注解开发_5 mybatis注解建立实体类属性和数据库表中列的对应关系
创建新项目,一对多 复制刚才关闭的项目的文件 复制到们的新项目里面 复制包的依赖 删减相关代码.只保留这三个查询的方法 模糊查询改成传统的占位符的方式 之前是可以自定义实体类的属性字段,和数据库的字典 ...
- MySQL必知必会-官方数据库表及SQL脚本导入生成
最近在复习SQL语句,看的是MySQL必知必会这本书,但是发现附录中只有表设计,没有表的具体数据.所以在学习相应的语句中体验不是很好,去网上查了数据库的内容,自己慢慢导入到了数据库中.把表放出来作为参 ...
- 在运行程序时报错:"如果在 Code First 模式下使用,则使用 T4 模板为 Database First 和 Model First 开发生成的代码可能无法 正常运行。若要继续使用 Database First 或 Model First,请确保在执行应用程序的 config 文件中指 定 Entity Framework 连接字符串。若要将这些从 Database First 或 Mod
解决方案: 将context类下的方法“OnModelCreating”修改为: protected override void OnModelCreating(DbModelBuilder mode ...
- mybatis-generator指定列进行自动生成代码
目前mybatis-generator已经升级到1.3.3,功能比较强大,但是目前从table中如果字段较多可以选择忽略生产的字段(通过ignoreColumn属性实现,http://generato ...
- T4模板编辑器
一 二.工具 (T4模板编辑器) 使用效果 1.tangibleT4EditorPlusModellingToolsVS2013.msi 2.devart T4 Editor for Visual ...
随机推荐
- CVPR2013总结
前不久CVPR的结果出来了,首先恭喜我一个已经毕业工作的师弟中了一篇文章.完整的文章列表已经在CVPR的主页上公布了(链接),今天把其中一些感兴趣的整理一下,虽然论文下载的链接大部分还都没出来,不过可 ...
- 背水一战 Windows 10 (44) - 控件(日期类): CalendarView, DatePicker, TimePicker
[源码下载] 背水一战 Windows 10 (44) - 控件(日期类): CalendarView, DatePicker, TimePicker 作者:webabcd 介绍背水一战 Window ...
- 【转】C#模拟http 发送post或get请求
原文地址:http://www.cnblogs.com/xssxss/archive/2012/07/03/2574554.html 模拟POST Json public static string ...
- 【CJOJ2616】 【HZOI 2016】偏序 I(cdq分治,树状数组)
传送门 CJOJ Solution 考虑这是一个四维偏序对吧. 直接cdq套在一起,然后这题有两种实现方法(树状数组的更快!) 代码实现1(cdq+cdq+cdq) /* mail: mleautom ...
- python 数据类型二 (列表和元组)
一.列表 1.1 列表的介绍 列表是python的基本数据类型之一,其他编程语言也有类似的数据类型,比如JS中的数组,java中的数组等等,它是以[]括起来,每个元素用逗号隔开,而且可以存放各种数据类 ...
- js中cookie,localStorage(sessionStorage)的存取
一.cookie (原生的不好用,自己简单封装) 1. 存cookie的方法: function setCookie(c_name,value,expiredays) { var exdate=new ...
- fastjson 反序列化漏洞笔记,比较乱
现在思路还是有点乱,希望后面能重新写 先上pon.xml 包 <?xml version="1.0" encoding="UTF-8"?> < ...
- [工具]Cobalt Strike 3.13 TeamServer for Windows
Cobalt Strike 3.13 TeamServer for Windows 0x001 环境 CS 3.12 或 3.13 Kali或Win最好安装jdk1.8.5或之后版本 设置环境变量,如 ...
- Docker三剑客之Docker Machine
一.什么是Docker Machine Docker Machine 是Docker官方编排项目之一,使用go语言编写的,使用不同引擎在多种平台上快速的安装Docker环境,开源地址:https:// ...
- vue教程1-05 事件 简写、事件对象、冒泡、默认行为、键盘事件
vue教程1-05 事件 简写.事件对象.冒泡.默认行为.键盘事件 v-on:click/mouseover...... 简写的: @click="" 推荐 事件对象: @clic ...