手机壳贴钻还能这样DIY 你不知道吧(怎样贴手机壳的钻才能更牢固) 余弦函数公式大全表格(余弦函数公式) 如何解决使用打印机突然提示“尚未安装打印机”(尚未安装打印机怎么回事) 梦幻西游三维版怎么联系在线客服(梦幻西游三维版客服电话人工服务电话) 销售原材料结转成本的会计分录(销售原材料会计分录) 手机如何查询东莞住房公积金?(手机如何查询东莞住房公积金贷款额度) 呆萌宠物对对碰攻略(萌宠对决攻略) 工程招标代理资质取消通知(工程招标代理资质) 法定节假日加班工资怎么算(法定节假加班工资怎么计算) 驾照理论考试技巧和方法(驾照理论考试技巧和方法口诀) 黄花菜不能和什么食物同吃(黄花菜不能和什么食物一起吃) HTC G12刷recovery教程及进入recovery方法(htc如何进入recovery) b血型的人有什么特点男(b血型的人有什么特点) Sai软件手绘简笔画绿色环保机器人(SAI画画软件) Their是什么意思中文翻译怎么读(their是什么意思) 网上赚钱创业方法大全(网上赚钱创业方法大全套) 走路赚钱的几种方式(走路赚钱的几种方式是什么) 红龙鱼饲养方法(红龙草) 怎样增强抵抗力(怎样增强抵抗力和免疫力) qb怎么转给别人(怎么把qb给别人) 不是花中偏爱菊此花开尽更无花全诗拼音(不是花中偏爱菊此花开尽更无花全诗) 微信新功能"拍一拍"上线!(微信新功能朋友圈折叠) 现场仪表HART通讯如何接线(hart怎么接线) peacewarfound的英语怎么读(peace war find怎么读) q版泡泡堂6怎么换人(q版泡泡堂可以三人吗) 如何获得更多渠道商及他们的支持(如何获得更多渠道商及他们的支持英语) 作文那一次我失败了(作文那一次我真高兴) 围巾情人扣的织法(围巾情人扣的织法粗线) 悬崖上的金鱼公主国语版樱花动漫(悬崖上的金鱼公主国语版高清) 智能电视怎么看地方台频道直播 教你方法(智能电视怎么看地方台的频道) 初二英语周报所有答案大全(初二英语周报答案网) 篮球计分器 教你使用篮球计分器!(篮球计分器如何使用) 玉兔怎么画简单又漂亮(玉兔怎么画简单又漂亮图片) 项目措施费包干含后期签证吗(项目措施费包括哪些) 像粑粑一样恶心人(像粑粑一样恶心人的图片) PPT如何修改激光笔颜色(放映ppt时激光笔的颜色是可以更改的) 果绿色cmyk色值为多少(果绿色cmyk色值) 淘宝天猫如何设置店铺抽奖?(淘宝天猫如何设置店铺抽奖时间) 怎么设置浏览器的兼容模式(怎么设置浏览器的兼容模式手机) 台达VFD-B 3.7kW变频器维修方法(台达vfd—b变频器使用手册) 摩尔庄园手游农庄拍照任务流程(摩尔庄园手游庄园拍照任务) 医者仁心的经典语录(医者仁心是什么意思) 打好台球的小技巧(打好台球的小技巧和方法) 纸张方向只设置一页横向(纸张种类) 京东巴枪联迪P990修改时间 红樱桃木门效果图(红樱桃木) 大梅沙附近酒店攻略(大梅沙附近住宿) 光纤猫 Modem)怎样设置无线上网?(光纤猫设置方法) 圆舞曲之王是谁呢(圆舞曲之王是) 怎么收藏和查看当当网的图书(怎么收藏和查看当当网的图书资源)
您的位置:首页 >综合精选 >

代码生成工具下载(创建代码生成器可以很简单 如何通过T4模板生成代码 下篇)

导读 关于代码生成工具下载,创建代码生成器可以很简单 如何通过T4模板生成代码 下篇这个问题很多朋友还不知道,今天小六来为大家解答以上的

关于代码生成工具下载,创建代码生成器可以很简单 如何通过T4模板生成代码 下篇这个问题很多朋友还不知道,今天小六来为大家解答以上的问题,现在让我们一起来看看吧!

1、在《上篇》中我们通过T4模板为我们指定的数据表成功生成了我们需要的用于添加、修改和删除操作的存储过程。

2、但是这是一种基于单个文件的解决方案,即我们必须为每一个生成的存储过程建立一个模板。

3、如果我们提供一种基于多文件的代码生成方式,将会为编程人员带来极大的便利。

4、借助于T4 ToolBox这个开源工具箱,多文件的SQL Generator的实现变得异常简单。

5、[文中的例子可以从这里下载]目录二、创建自定义的Generator三、ProcedureGenerator如何被使用?一、多文件代码生成器会带来多大的便利?我们先来直观的感受一下较之《上篇》提供的单一文件的代码生成器,基于多文件的代码生成解决方案会为开发人员带来多大的便利。

6、 同样对于《上篇》创建的数据表T_PRODUCT,之前我们为了生成三个不同的存储过程,我们不得已需要创建3个不同的T4模板文件。

7、实际上我们更需要的方式只需要创建一个T4模板,让我们的SQL Generator自动为我们生成3个包含相应存储过程的.sql附属文件,如左图所示(点击看大图)。

8、有的时候,基于单个数据表的存储过程生成方式我们依然觉得不方便。

9、如果我们能够在T4模板文件中指定的数据表的列表,让我们的SQL Generator为列表的每一个数据表都生成CUD三个存储过程,这样的方式更加具有吸引力。

10、如右图所示(点击看大图),一个订单模块包含两个具有主子关系的两张表(T_ORDER和T_ORDER_DETAIL),现在我们在一个T4模板中指定这两个表明,通过SQL Generator可以帮助我们生成6个包含存储过程的.sql附属文件。

11、甚至有的时候我们连数据表列表都无需指定,让SQL Generator为所有的表都生成相应的存储过程。

12、我的例子中没有提供这样的功能,但是实现自来不会存在任何问题。

13、二、创建自定义的Generator在《上篇》中我创建了一个抽象的ProcedureTemplate类,以及三个基于生成CUD存储过程的具体ProcedureTemplate:InsertProcedureTemplate、UpdateProcedureTemplate和DeleteProcedureTemplate。

14、它们都将直接服务于我们今天将要提供的基于多文件的SQL Generator。

15、在《上篇》中,这四个Template分别定义在4个不同的TT文件中,3个具体的ProcedureTemplate通过<#@include>指令将抽象ProcedureTemplate模板文件包含过来。

16、由于我们将要创建的T4模板将会使用到这四个类,如果我们用四个<#@include>指令将四个TT文件包含过来,由于T4引擎将会导致对ProcedureTemplate的4次包含,最好将会导致变异问题。

17、个人觉得这应该算是T4引擎解析包含关系的一个局限性,为了解决这个问题我们不得不抽象的ProcedureTemplate和三个具体的ProcedureTemplate都合并成一个TT文件。

18、T4 ToolBox为类库中为了提供了一个抽象的T4Toolbox.Generator类用于实现多文件的代码生成。

19、为此我们创建一个TT模板文件,定义了如下一个继承自该类的ProcedureGenerator。

20、ProcedureGenerator的核心是通过属性Templates定义的类型为IEnumerable的ProcedureTemplate列表,这个列表在存储过程中进行初始化。

21、而对于ProcedureGenerator的构造函数,处理定义了一个表示数据库连接字符串的databaseName的参数外,并以数组参数的形式指定了生成的存储过程基于的数据表名的列表。

22、<#@ import namespace="System.Collections.Generic" #><#@ include file="***.tt" #><#@ include file="***.tt" #><#+publicclass ProcedureGenerator : Generator{public IEnumerable Templates{get; private set;}public ProcedureGenerator(string databaseName, paramsstring[] tableNames) {if(null == tableNames || tableNames.Length == 0) {thrownew ArgumentNullException("tableNames"); } this.Templates = InitlizeTemplates(databaseName,tableNames); }private IEnumerable InitlizeTemplates(string databaseName, string[] tableNames) { foreach(string tableName in tableNames) {yieldreturnnew InsertProcedureTemplate(databaseName, tableName);yieldreturnnew UpdateProcedureTemplate(databaseName, tableName);yieldreturnnew DeleteProcedureTemplate(databaseName, tableName); } }protectedoverridevoid RunCore() {foreach(ProcedureTemplate tempalte inthis.Templates) { tempalte.RenderToFile(tempalte.GetProcedureName() + ".sql"); } }}#>真正的存储过程的T-SQL脚本实现在重写的RunCore中。

23、由于具体的文本转化逻辑都定义在了ProcedureTemplate中了,所以在这里我们需要遍历的ProcedureTemplate集合中每一个Template对象,调用RenderToFile方法将相应的存储过程的脚本写入以存储过程命名同名的.sql文件中。

24、三、ProcedureGenerator如何被使用?我们最后来看看我们创建的ProcedureGenerator最终如何被应用于具体的代码生成。

25、其实很简单,我们只需要创建相应的模板文件,通过<#@include>将定义ProcedureGenerator类的TT文件包含近来,最后以代码语句调用块(<#StatementCode#>)的形式实力化该对象,并调用Run方法即可。

26、在构造函数中指定数据库连接字符串的名称和数据表名的列表。

27、下面是基于但表的T4模板。

28、<#@ template language="C#" hostSpecific="true" debug="true" #><#@ include file="Templates***.tt" #><#new ProcedureGenerator("TestDb","T_PRODUCT").Run();#>下面是基于多表的T4模板:<#@ template language="C#" hostSpecific="true" debug="true" #><#@ include file="Templates***.tt" #><#new ProcedureGenerator("TestDb","T_ORDER","T_ORDER_DETAIL").Run();#>当你代码生成工作执行之后,会多出一个与TT文件同名的附属文件,你需要手工删除掉它。

29、从数据到代码--通过代码生成机制实现强类型编程[上篇]从数据到代码--通过代码生成机制实现强类型编程[下篇]从数据到代码--基于T4的代码生成方式创建代码生成器可以很简单:如何通过T4模板生成代码?[上篇]。

本文分享完毕,希望对大家有所帮助。

标签:

免责声明:本文由用户上传,如有侵权请联系删除!

最新文章