使用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. mongodb insert()、save()的区别

    mongodb 的 insert().save()  ,区别主要是:若存在主键,insert()  不做操作,而save() 则更改原来的内容为新内容. 存在数据:  { _id : 1, " ...

  2. HDU 1800——Flying to the Mars——————【字符串哈希】

    Flying to the Mars Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  3. 深入理解JavaScript系列(35):设计模式之迭代器模式

    介绍 迭代器模式(Iterator):提供一种方法顺序一个聚合对象中各个元素,而又不暴露该对象内部表示. 迭代器的几个特点是: 1.访问一个聚合对象的内容而无需暴露它的内部表示. 2.为遍历不同的集合 ...

  4. c#-IO和序列化操作

    IO 用到的命名空间:using System.IO; 文件和目录的管理! File类 FileInfo类 Directory类 DirectoryInfo类 操作文件的类! FileStream{ ...

  5. solidity语言

    IDE:Atom 插件:autocomplete-solidity 代码自动补齐   linter-solium,linter-solidity代码检查错误   language-ethereum支持 ...

  6. mysql四-1:单表查询

    一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二.关键 ...

  7. java参数传递之值传递

    一 概述 1.什么是参数传递? 调用方法时向形参传递数据的过程叫做参数传递.在编程语言中有两种传递方式:值传递与引用传递.必须强调的是,这里提到的两种传递方式不是仅限于java使用到的传递方式,而是出 ...

  8. SharePoint 2013 - Breadcrumb

    By default SharePoint 2013 doesn’t have a breadcrumb (like the 2010 version used to have). This was ...

  9. supervisor运行virtualenv环境下的nagios-api

    supervisord-example.conf [unix_http_server] file=/tmp/supervisor.sock ; path to your socket file [su ...

  10. Hadoop ->> MapReduce编程模型

    对于MapReduce模型的实现,有Java等一些语言实现了接口,或者用像Hive/Pig这样的平台来操作.MapReduce由Map函数.Reduce函数和Main函数实现.第一步,源数据文件按默认 ...