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,一经查实,立即删除!

相关文章

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

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

前端工程师必须知道的用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…

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

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

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

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

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;在…

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

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

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

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

微信抢红包

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

diy一个android手机版下载,原神个人自制版

原神个人自制版是一款十分有意思的自由探索游戏&#xff0c;用户在这里能看到不少的游戏角色&#xff0c;你需要做的就是不断的发挥出自己的“能力”&#xff0c;让游戏中的角色全部的到达你的队伍中。当然这里还有着不少的武器&#xff0c;等着用户的不断的寻找。原神个人自制…

linux备份用户权限

1:切换root用户&#xff0c;进入home目录&#xff0c;执行以下命令: [rootlocalhost home]# ll /home/wangfajun 2: home目录下执行以下命令进行wangfajun用户的权限备份&#xff1a; [rootlocalhost home]# getfacl -R wangfajun/ >permission.bak3: 改变权限&#xff0c;并…

微信限量纪念版code封面来啦,速看领取方式

临近春节&#xff0c;微信红包封面掀起了一阵热潮 前几天官方在开放平台出来这个活动。 是不是感觉这个封面特别的COOL&#xff0c;以代码的形式展示微信红包封面&#xff0c;鉴于大家如此的渴望这款封面&#xff0c;孙叫兽熬夜给大家制作10份。 预览一下效果&#xff1a; …

华为鸿蒙osbeta在哪看发布会,重磅消息!华为在发布鸿蒙OS2.0手机beta版本后,又发布搭载鸿蒙的新品!!...

原标题&#xff1a;重磅消息&#xff01;华为在发布鸿蒙OS2.0手机beta版本后&#xff0c;又发布搭载鸿蒙的新品&#xff01;&#xff01;就在12月16号华为刚刚发布鸿蒙OS2.0beta系统手机版本后&#xff0c;就在今天华为又举行了一个新品发布会&#xff0c;他就 是华为家庭智能和…

内存中数据模型和大数据持久性

ORM框架在希望与关系数据库进行交互时可以帮助开发人员。 对于关系数据库&#xff0c;有许多出色的ORM框架&#xff0c;例如Hibernate和Apache OpenJPA&#xff0c;其中一些确实很棒。 如今&#xff0c;大数据正在涌现&#xff0c;越来越多的人开发在大数据上运行的应用程序。…

CSDN主页下如何添加访客地图?

有大佬在付费专栏作者群提问这个问题,我们先来研究一下哈。 先看聊天记录吧 放大效果 这位博主是如何实现的呢? 我拿到了这个博客的地址,使用谷歌浏览器F12,拿到这部分代码。他这个是在自定义模块添加访问地图。 自定义模块需要是博客专家,企业博客或者VIP才可以编辑。只…

lucene_indexWriter说明、索引库优化

IndexWriter Hibernate的SessionFactory在Hibernate中。一般保持一个数据库就仅仅有一个SessionFactory。由于在SessionFactory中维护二级缓存&#xff0c;而SessionFactory又是线程安全的。所以SessionFactory是共享的。lucene的IndexWriter假设同一时候在一个索引库中同一时候…

600W个微信红包封面,人人都能领取到!!!

过年啦&#xff0c;祝大家春节快乐牛年大吉&#xff0c;万事如意&#xff01;别忘了春节还有红包封面领取新的一年愿大家财运亨通&#xff01;新年过完了&#xff0c;整理情绪上班了&#xff0c;祝福没有断&#xff0c;问候也依然。努力工作多表现&#xff0c;年后年终奖永远把…

android 二次绘制 layout,View的三次measure,两次layout和一次draw

我在《Android视图结构》这篇文章中已经描述了Activity,Window和View在视图架构方面的关系。前天&#xff0c;我突然想到为什么在setContentView中能够调用findViewById函数&#xff1f;View那时不是还没有被加载&#xff0c;测量&#xff0c;布局和绘制啊。然后就搜索了相关的…