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)

T4模板之菜菜鸟篇

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

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

T4模板之菜菜鸟篇

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”的文件。

T4模板之菜菜鸟篇

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

2.2、EF 6.x DbContext生成器

T4模板之菜菜鸟篇

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

T4模板之菜菜鸟篇

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

2.3、文本模板

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

T4模板之菜菜鸟篇

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

T4模板之菜菜鸟篇

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

T4模板之菜菜鸟篇

T4模板之菜菜鸟篇

2.4、运行时文本文件

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

五、雪上加霜

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

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

T4模板之菜菜鸟篇

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

T4模板之菜菜鸟篇

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

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

T4模板之菜菜鸟篇

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

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

    T4模板之菜菜鸟篇

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

    T4模板之菜菜鸟篇

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

    T4模板之菜菜鸟篇

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

    T4模板之菜菜鸟篇

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

    T4模板之菜菜鸟篇

    • 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文件,重新按照既定规则组合起来。

      上一篇:RPC框架与分布式服务框架的区别


      下一篇:C#基础课程之二变量常量及流程控制