使用T4模板,最令人喜欢的就是T4Toolbox了,他可以帮助我们生成多文件,并且直接包含在项目中。

环境:vs2017

T4代码高亮插件:Devart T4 Editor

插件地址:T4 Toolbox

安装成功了,我们新建项的时候会出现T4 Toolbox

①新建TestTemplate

模板中的类容如下显示,你保存并不会生成什么东西

②创建一个文本模板

③修改TestT4.tt模板和我们的TestTemplate.tt模板

TestT4.tt

ps:   Host :  ITextTemplatingEngineHost       https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2012/bb126505(v=vs.110)

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ include file="T4Toolbox.tt" #> <# //需要把我们的T4Toolbox.tt文件包含进来,这是你下载插件才能用的 #>
<#@ include file="$(ProjectDir)T4Tool/TestTemplate.tt" #> <# //包含我们刚刚创建的T4Toolbox中的模板文件 #> <#
//申明生成的路径 Path:上面需要导入命名空间System.IO
string curPath = Path.GetDirectoryName(Host.TemplateFile); //获取T4模板的文件夹
string destPath = Path.Combine(curPath, "ModelTest");
//初始化数据
List<Student> stuList=new List<Student>()
{
new Student(){Name="Sealee",Des="我是第一个人噢" },
new Student(){Name="Jack",Des="我是第二个人噢" },
new Student(){Name="Leo",Des="我是第三个人噢" },
new Student(){Name="Lh",Des="我是第四个人噢" },
};
//循环创建文件
foreach(Student model in stuList)
{
//设置文件名
string fileName = string.Format(@"{0}\{1}.cs", destPath, model.Name);
//利用构造函数进行传递参数
TestTemplate template = new TestTemplate(model);
template.Output.Encoding = Encoding.UTF8; //编码格式
template.Output.PreserveExistingFile =false; //是否从新生成 ture:每次都是删除你之前的 ,然后从新创建. false:更新,如果一样就不修改,避免每次都会签出文件
template.RenderToFile(fileName); //输出成文件
}
#> <#+
//我们做测试就简单的申明一个类
public class Student
{
//姓名
public string Name{get;set;}
//描述
public string Des{get;set;}
} #>
TestTemplate.tt
<#+
// <copyright file="TestTemplate.tt" company="">
// Copyright © . All Rights Reserved.
// </copyright> public class TestTemplate : CSharpTemplate
{
private Student _student;
public TestTemplate(Student student) //利用构造函传递参数
{
_student=student;
} public override string TransformText() //这个方法中我们可以自定义生成的类容。这里是类,也可以是HTML,XML文件
{ base.TransformText(); 
//修改我们要生成的文件
#>
namespace MyTestNameSpace
{
public class <#= _student.Name #>
{
public string Name="<#= _student.Name #>";
public string Des="<#= _student.Des #>";
}
}
<#+
return this.GenerationEnvironment.ToString();
}
}
#>

在TestT4.tt中保存,就会自动生成下面的文件(如果没有出错)

④修改包含文件扩展名和TransformText方法

https://docs.microsoft.com/en-us/visualstudio/modeling/t4-include-directive?view=vs-2017

TestTemplate.tt修改为TestTemplate.t4,并注释base.TransformText();

⑤TestT4.tt的包含文件修改扩展名,然后保存

注释没有了

当然,这个工具主要是用来生成我们的数据库实体类的,在生成数据库实体之前,我们需要知道如何读取数据库中的表名,主键,列名,类型,是否为空等等。下篇我们就要介绍sql语句了。

T4Toolbox简单了解的更多相关文章

  1. 【造轮子】打造一个简单的万能Excel读写工具

    大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...

  2. Fabio 安装和简单使用

    Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...

  3. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  4. 哪种缓存效果高?开源一个简单的缓存组件j2cache

    背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...

  5. 在Openfire上弄一个简单的推送系统

    推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...

  6. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  7. 使用 Nodejs 搭建简单的Web服务器

    使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...

  8. ASP.NET Aries 入门开发教程2:配置出一个简单的列表页面

    前言: 朋友们都期待我稳定地工作,但创业公司若要躺下,也非意念可控. 若人生注定了风雨飘摇,那就雨中前行了. 最机开始看聊新的工作机会,欢迎推荐,创业公司也可! 同时,趁着自由时间,抓紧把这系列教程给 ...

  9. 简单入门canvas - 通过刮奖效果来学习

    一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...

随机推荐

  1. 腾讯蔡晨:十年沉淀,腾讯iOA为企业安全保驾护航

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 背景:5月23-24日,以"焕启"为主题的腾讯"云+未来"峰会再广州召开,广东省各级政府机构领导.海 ...

  2. Python编码规范杂记(很乱:))

    Python编码规范 导入模块 每一个(第三方)模块的导入都需要两个import语句, 如下 使用import some的方式导入模块, 如果有还有子模块的话, 则from father.son im ...

  3. 解决The current branch is not configured for pull No value for key branch.master.merge found in config

    使用Git Pull项目的时候出现这个问题: The current branch is not configured for pull No value for key branch.master. ...

  4. Hibernate=====HQL实用技术

    Hibernate支持三种查询语言:HQL查询.Criteria查询和原生SQL查询 HQL(hibernate Query Language,hibernate查询语言)是一种面向对象查询语言,其中 ...

  5. 轻松掌握java读写锁(ReentrantReadWriteLock)的实现原理

    转载:https://blog.csdn.net/yanyan19880509/article/details/52435135 前言 前面介绍了java中排它锁,共享锁的底层实现机制,本篇再进一步, ...

  6. Python 显示调用栈

    Python调试不如强类型的语言方便,显示调用栈有时非常必要,inspect模块很好用 import inspect inspect.stack() inspect.stack()返回的是一个函数栈帧 ...

  7. ATL模板库中的OLEDB与ADO

    上次将OLEDB的所有内容基本上都说完了,从之前的示例上来看OLEDB中有许多变量的定义,什么结果集对象.session对象.命令对象,还有各种缓冲等等,总体上来说直接使用OLEDB写程序很麻烦,用很 ...

  8. Jms学习篇一:JMS介绍

    1.JMS介绍: JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API JMS是一种与厂商无关的 API,用来访问 ...

  9. 提取url中参数的方法(转换成json格式)

    还是直接上代码吧. //将url中的参数获取到并抓换成json格式 function serilizeUrl(url){ var urlObject={}; //1.正则匹配是不是以?结尾 if(/\ ...

  10. spring security基于数据库表进行认证

    我们从研究org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl.class的源码开始 public class JdbcDaoI ...