T4模板之菜菜鸟篇

一、废话

T4(Text Template Transformation Toolkit)是微软官方在VisualStudio 2008中开始使用的代码生成引擎。在 Visual Studio 中,“T4 文本模板”是由一些文本块和控制逻辑组成的混合模板,它可以生成文本文件。 在 Visual C# 或 Visual Basic 中,控制逻辑编写为程序代码的片段。生成的文件可以是任何类型的文本,例如网页、资源文件或任何语言的程序源代码。现在的VS中只要与代码生成相关的场景基本上都能找T4的身影,比如MVC的视图模板,Entity Framwork的DataContext模板等等。

二、说明

1、文本是基于Visual Studio 2013 + vs插件(Devart T4 Editor) 讲述的,为什么不用Visual Studio 2015,目前Devart T4 Editor不支持vs2015,有点蛋疼。哪个高手懂得VS插件的制作,帮忙升级下 Devart T4 Editor 呗。

2、这应该真心是一篇For菜菜鸟的文章,但凡有经验的就略过吧!

三、视觉优先

1、新建一个控制台应用程序(Zeje.T4)

image

2、在项目中“添加”->”新建项”,弹出“添加新项”对话框,在右上角的搜索框输入“模板”,分别针对这四种模板创建新项。image

3、文件创建后,解决方案资源管理器的列表展示如下。

image

4、各种疑问

4.1、EF 5.x DbContext生成器是啥?

4.2、EF 6.x DbContext生成器是啥?

4.3、文本模板是啥?

4.4、运行时文本模板是啥?

四、解惑

1、返璞归真

  • 不管是什么,都是文件,要么是“文件”,要么是“文件组”
  • 都有后缀为.tt的文件
  • 后缀为.tt的文件,我们统称其为“T4模板文件”

2、各个击破

2.1 、EF 5.x DbContext生成器

点击添加后,生成的是两个后缀为.tt的文件

刚才命名是“EF5”,那么它就是帮我们产生两个叫“XX.Context.tt”和“XX.tt”的文件。

image

打开EF5.Context.tt和EF5.tt文件,都是TMD的一堆代码,真心看不懂有木有?那就PASS吧!

2.2、EF 6.x DbContext生成器

image

TMD呀!跟2.1说的完全一样,还是TMD的一堆代码。不过细心的会发现,文件里的内容会有所不同。是PASS吗?不,展开看看

image

文件EF6.Context.cs和EF6.cs里面基本上没有内容,回去看看EF5.Context.cs和EF5.cs文件,基本上一样也是没有内容,PASS吧!

2.3、文本模板

打开TextTemplate_.tt,眼前一亮的有木有,这是多大的差距呀!

image

这TextTemplate_.tt文件中的内容就是这般简单,TextTemplate_.txt文件里什么内容都木有。

image

为什么有的.tt文件下面展开的是XXX.cs文件,而又得却是XXX.txt文件呢?回头仔细研究下,原来是这段代码(如下图)在作怪

image

image

2.4、运行时文本文件

分别打开RuntimeTextTemplate_.tt和RuntimeTextTemplate_.cs的文件,是否又如上面的一样.tt文件一堆代码而展开后的文件基本没内容?好吧!原以为自己找到规律了,却发现自己太天真了,.tt文件内容很少,.cs文件的内容又是一堆!

五、雪上加霜

为什么雪上加霜呢?因为下面的也跟T4模板扯上点关系!

0、新建项目“Zeje.EF_”(项目类型为类库,.net framework版本为4.5)

image

1、在项目中“添加”->”新建项”,弹出“添加新项”对话框,在右上角的搜索框输入“模型”,创建ADO.NET实体数据模型“Zeje.Hr”

image

2、点击添加,发现了一个选择题,到底选哪个?

  • 来自数据库的EF设计器
  • 空EF设计器模型
  • 空Code First模型
  • 来自数据库的Code First

image

好吧,就让暴风雨来得更猛烈些吧!咱们四个都创建,分别命名,对比下(具体新建过程就不列出来占用篇幅了)!

  • 来自数据库的EF设计器(命名: DBFirst,数据库基于自己本地的[Zeje.Hr]数据库)

image

  • 空EF设计器模型(命名: DBFirst_)

image

  • 空Code First模型(命名: CodeFirst_,)

image

  • 来自数据库的Code First(命名: CodeFirst,数据库基于自己本地的[Zeje.Hr]数据库【把相关放在CodeFirst文件夹中】)

image

好吧!不敢跟我耍狠了,只有第一种才跟T4模板扯上关系。再把图片引用下,相关T4模板文件已经用红色框圈住了,解说下吧!

image

  • DBFirst.edmx【本质上就是一个XML文件,记录的是数据库映射出来的实体,这实体包括表、视图、存储过程、约束等】
  • DBFirst.Context.tt 【T4模板,展开后下面有一个DBFirst.Designer.cs文件】
  • DBFirst.Designer.cs【还真不知道现在起什么作用】
  • DBFirst.edmx.diagram【本质上就是一个XML文件,记录的是edmx设计视图下实体的坐标】
  • DBFirst.tt【T4模板,展开后下面还有多个.cs文件,TMD这又跟上面的只有一个.cs或者一个.txt文件不同,至于怎么整的后面一起研究】

对于这些个文件,它们是一个文件组,它们的布局取决于【Zeje.EF_.csproj】文件,假如用记事本打开,它的本质也一个XML文件,通过一定的规则,把上述文件组织在一起而已。在日常的操作中,我们可能一不小心随便拖动下这些个文件中的某一个,它的组合就乱了,那个时候就只能通过手动调整.csproj文件,重新按照既定规则组合起来。

转载于:https://www.cnblogs.com/zeje/p/5156339.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux动态库ppt,LINUX系统中动态链接库创建与使用补充_区块链白皮书代写|市场计划书项目PPT设计_Tbleg...

区块链白皮书代写大家都知道,在WINDOWS系统中有很多动态链接库(以.DLL为后缀文件,DLL即Dynamic Link Library)。这种动态链接库,和静态函数库不同,它里面函数并不是执行程序本身一部分,而是根据执行程序需要按需装入&a…

MyEclipse+JavaEE+jsp+sqlsever实现产品售后服务系统

导读:我国信息产业、企业售后服务发展迅速,电商的发展超出了所有人都想象,与此同时也带来了诸多的问题。飞速发展的交易额,带来了大量的GDP增长,然而光鲜的背后是每天无数客服手忙脚乱的为顾客服务。由于顾客对自身生活质量要求越来越高,售后管理业必须随着人们生活水平的…

使用Apache Cassandra设置一个SpringData项目

在这篇文章中,我们将使用Gradle和spring boot来创建一个将spring-mvc和Apache Cassandra数据库集成在一起的项目。 首先,我们将从Gradle配置开始 group com.gkatzioura version 1.0-SNAPSHOTapply plugin: java apply plugin: eclipse apply plugin: i…

西南大学0039c语言作业答案,2017年6月西南大学继续教育学院C语言0039大作业答案...

1、假定p1和p2是已赋值的字符型指针&#xff0c;则下述有关运算中&#xff0c;非法的是(.*(p1-2p2)getchar( ); )2、循环语句for (x0,y0;(y!123)||(x<4);x)&#xff1b;的循环执行(无限次)3、设有定义"int a5,b,*p&a;"&#xff0c;执行下列语句后,b的值不为5的…

第一周学习进度表

第一周所花时间&#xff08;包括上课&#xff09;上课时间&#xff1a;4小时 周三、周五、周六各3小时阅读<<构建之法>>代码量&#xff08;行&#xff09;45博客量4了解到的知识 在上软件工程这门课使我对编程有了哟个新的认识&#xff0c;就是在编写一个复杂程序时…

前端工程师必须知道的用javaScript刷新当前页面的3种方法

业务场景:APP列表页右上角有一个立即刷新按钮,点击立即刷新需要刷新当前页面。下面简单实现几个DEMO 效果图 目录 方法1:reload() 方法 方法2:replace() 方法

【BZOJ1002】[FJOI2007]轮状病毒 递推+高精度

Description 给定n(N<100)&#xff0c;编程计算有多少个不同的n轮状病毒。 Input 第一行有1个正整数n。 Output 将编程计算出的不同的n轮状病毒数输出 Sample Input 3Sample Output 16HINT Source Solution&#xff1a;推导不会&#xff0c;看不懂&#xff0c;知道了公式f[i…

cla c 语言编译器,第九章 CLA_C2000_C_Compiler.pdf

TI CLA C 编译器概述C2000 Compiler RoadmapCGT v6.2CGT v6.1ProductionCGT v6.0Early AdopterIn DevelopmentCGT v5.2FutureCurrent 11Q4 12Q1 12Q2 12Q3 12Q4 13H1 FutureC2000 CGT v5.2 C2000 CGT v6.1 C2000 CGT v6.2•Assembler support for CLA •CLA C support •Future…

新年将至, 程序员如何以代码送出新春祝福

导读:农历新年将至,祝福的话汇成千言万语都寄托在贺卡之中,也许今年你受到了很多的挫折,又或者是顺顺利利度过了一年。但不管怎么样,不管是哭与笑,人生的年轮都已经转过了一圈。我们唯有继续向前走,不要回头,未来的自己取决于现在的自己。有时候一句不经意的问候,一句…

C语言 删除文件 M,最全的C盘可删除文件清单

一、关闭Win7系统休眠功能“以管理员身份运行&#xff0c;所有程序→附件→命令提示符”&#xff0c;右击选择“以管理员身份运行”&#xff0c;进入命令提示符后&#xff0c;手工输入“powercfg -h off” 关闭Win7系统休眠功能;二、关闭系统保护计算机右键属性--高级管理设置-…

身份证/异地身份证在北京办理的解决办法

今年4月18号身份证就到期啦,赶紧抽个时间去补办一个,这种事情一般只能选在工作日,你工作别人也工作的时间段。这个是初中时期弄得身份证,都10年啦,这次在北京补办一下,老家是安徽的。又逢今年在京过年,我太难了。 需要什么材料? 一般来说需要户口本,居住证,还有快要…

小程序--显示图形效果

//运用for循环嵌套循环知识 class Alhh{ public static void main(String[] args){ for(int i0;i<5;i){//控制行数 for(int j0;j<4-i;j){//用-代替空格 System.out.print("-"); } for(int k0;k<i1;k){//*的个数 System.out.print("* "); } System…

jsf集成spring_JSF 2,PrimeFaces 3,Spring 3和Hibernate 4集成项目

jsf集成spring本文展示了如何集成JSF2&#xff0c;PrimeFaces3&#xff0c;Spring3和Hibernate4技术。 它为Java开发人员提供了一个通用的项目模板。 另外&#xff0c;如果Spring不用于业务和数据访问层&#xff0c;则可以提供JSF – PrimeFaces和Hibernate集成项目。 二手技…

linux rc4,Linux kernel 4.8-rc4发布下载,正式版越来越近

距离第三个候选版发布一周时间&#xff0c;Linus Torvalds于今天宣布了Linux Kernel 4.8-rc4&#xff0c;喜欢尝鲜的用户可以下载体验了。Linus Torvalds在邮件中称&#xff0c;Linux kernel 4.8-rc4是目前为止更新幅度最小的一个RC版本了&#xff0c;这也意味着随着正式版距离…

程序员表白,不光需要“技术”,更需要勇气!

回忆起我们的点点滴滴&#xff0c;我们也有美好回忆。程序员应该如何表白呢 &#xff1f;很大一部分是不够自信&#xff0c;怕穷&#xff0c;怕拒绝&#xff0c;其实更多的你可能需要的是一份勇气&#xff0c;爱&#xff0c;要大声说出来&#xff01;恰逢官方正文&#xff0c;在…

休眠:在sqlRestriction上使用联接表别名

如果在复杂查询中使用休眠模式&#xff0c;则需要使用sql。 因此&#xff0c;sqlRestrictions可以解决。 但是&#xff0c;对联接表别名使用sql限制有点棘手。 将有三个表&#xff1a; 公司表。 员工表。 每个员工都属于一家公司&#xff0c;因此我们有多对一的关系。 福…

android 批量查找view,Android Recyclerview实现多选,单选,全选,反选,批量删除的功能

效果图如下:recyclerview 实现多选,单选,全选,反选,批量删除的步骤1.在recyclerview布局中添加上底部的全选和反选按钮,删除按钮,和计算数量等控件2.这里选中的控件没有用checkbox来做,用的是imageview,选中和不选中其实是两张图片3.默认是不显示选中的控件的,点击编辑的时候显…

盘点和程序员相关的那些事,让你不再被割韭菜,薅羊毛!

如今的我们处在一个信息爆炸的时代&#xff0c;光埋头苦恼的闭门造车已经不能满足我们程序员的日常开销啦&#xff0c;因此需要密切关注和自己相关的那些事&#xff01; 目录 1.成功绝非偶然 2.你们公司几号发工资就代表你公司所处的级别 3.各大公司HR对学历的评价&#xff1…

转:fopen与open可以转换吗

绝对不可以。fopen是C运行库级别的函数&#xff0c;而open是system call的wrapper routine。fopen返回FILE *的指针&#xff0c;这个结构本身维护着一些关于这个文件的信息&#xff0c;而open返回的是这个被打开的文件的id&#xff0c;这个id是内核来维护的。这两个东西根本不是…

微信抢红包

今晚就过年了,相信很多朋友在微信群能收到很多红包,但是过年可能吃的更重要。比如我~ 那么你需要如下一款软件。 那就是让你在百忙之中,都不会错过任意一个红包,也就是微信的抢红包神器。 我也是心血一热,想找个软件代替自己领红包,于是就找了找,并且试验了一波,确实是…