手機(jī)殼貼鉆還能這樣DIY 你不知道吧(怎樣貼手機(jī)殼的鉆才能更牢固) 余弦函數(shù)公式大全表格(余弦函數(shù)公式) 如何解決使用打印機(jī)突然提示“尚未安裝打印機(jī)”(尚未安裝打印機(jī)怎么回事) 夢(mèng)幻西游三維版怎么聯(lián)系在線客服(夢(mèng)幻西游三維版客服電話人工服務(wù)電話) 銷售原材料結(jié)轉(zhuǎn)成本的會(huì)計(jì)分錄(銷售原材料會(huì)計(jì)分錄) 手機(jī)如何查詢東莞住房公積金?(手機(jī)如何查詢東莞住房公積金貸款額度) 呆萌寵物對(duì)對(duì)碰攻略(萌寵對(duì)決攻略) 工程招標(biāo)代理資質(zhì)取消通知(工程招標(biāo)代理資質(zhì)) 法定節(jié)假日加班工資怎么算(法定節(jié)假加班工資怎么計(jì)算) 駕照理論考試技巧和方法(駕照理論考試技巧和方法口訣) 黃花菜不能和什么食物同吃(黃花菜不能和什么食物一起吃) HTC G12刷recovery教程及進(jìn)入recovery方法(htc如何進(jìn)入recovery) b血型的人有什么特點(diǎn)男(b血型的人有什么特點(diǎn)) Sai軟件手繪簡(jiǎn)筆畫綠色環(huán)保機(jī)器人(SAI畫畫軟件) Their是什么意思中文翻譯怎么讀(their是什么意思) 網(wǎng)上賺錢創(chuàng)業(yè)方法大全(網(wǎng)上賺錢創(chuàng)業(yè)方法大全套) 走路賺錢的幾種方式(走路賺錢的幾種方式是什么) 紅龍魚飼養(yǎng)方法(紅龍草) 怎樣增強(qiáng)抵抗力(怎樣增強(qiáng)抵抗力和免疫力) qb怎么轉(zhuǎn)給別人(怎么把qb給別人) 不是花中偏愛(ài)菊此花開盡更無(wú)花全詩(shī)拼音(不是花中偏愛(ài)菊此花開盡更無(wú)花全詩(shī)) 微信新功能"拍一拍"上線!(微信新功能朋友圈折疊) 現(xiàn)場(chǎng)儀表HART通訊如何接線(hart怎么接線) peacewarfound的英語(yǔ)怎么讀(peace war find怎么讀) q版泡泡堂6怎么換人(q版泡泡堂可以三人嗎) 如何獲得更多渠道商及他們的支持(如何獲得更多渠道商及他們的支持英語(yǔ)) 作文那一次我失敗了(作文那一次我真高興) 圍巾情人扣的織法(圍巾情人扣的織法粗線) 懸崖上的金魚公主國(guó)語(yǔ)版櫻花動(dòng)漫(懸崖上的金魚公主國(guó)語(yǔ)版高清) 智能電視怎么看地方臺(tái)頻道直播 教你方法(智能電視怎么看地方臺(tái)的頻道) 初二英語(yǔ)周報(bào)所有答案大全(初二英語(yǔ)周報(bào)答案網(wǎng)) 籃球計(jì)分器 教你使用籃球計(jì)分器!(籃球計(jì)分器如何使用) 玉兔怎么畫簡(jiǎn)單又漂亮(玉兔怎么畫簡(jiǎn)單又漂亮圖片) 項(xiàng)目措施費(fèi)包干含后期簽證嗎(項(xiàng)目措施費(fèi)包括哪些) 像粑粑一樣惡心人(像粑粑一樣惡心人的圖片) PPT如何修改激光筆顏色(放映ppt時(shí)激光筆的顏色是可以更改的) 果綠色cmyk色值為多少(果綠色cmyk色值) 淘寶天貓如何設(shè)置店鋪抽獎(jiǎng)?(淘寶天貓如何設(shè)置店鋪抽獎(jiǎng)時(shí)間) 怎么設(shè)置瀏覽器的兼容模式(怎么設(shè)置瀏覽器的兼容模式手機(jī)) 臺(tái)達(dá)VFD-B 3.7kW變頻器維修方法(臺(tái)達(dá)vfd—b變頻器使用手冊(cè)) 摩爾莊園手游農(nóng)莊拍照任務(wù)流程(摩爾莊園手游莊園拍照任務(wù)) 醫(yī)者仁心的經(jīng)典語(yǔ)錄(醫(yī)者仁心是什么意思) 打好臺(tái)球的小技巧(打好臺(tái)球的小技巧和方法) 紙張方向只設(shè)置一頁(yè)橫向(紙張種類) 京東巴槍聯(lián)迪P990修改時(shí)間 紅櫻桃木門效果圖(紅櫻桃木) 大梅沙附近酒店攻略(大梅沙附近住宿) 光纖貓 Modem)怎樣設(shè)置無(wú)線上網(wǎng)?(光纖貓?jiān)O(shè)置方法) 圓舞曲之王是誰(shuí)呢(圓舞曲之王是) 怎么收藏和查看當(dāng)當(dāng)網(wǎng)的圖書(怎么收藏和查看當(dāng)當(dāng)網(wǎng)的圖書資源)
您的位置:首頁(yè) >綜合精選 >

代碼生成工具下載(創(chuàng)建代碼生成器可以很簡(jiǎn)單 如何通過(guò)T4模板生成代碼 下篇)

導(dǎo)讀 關(guān)于代碼生成工具下載,創(chuàng)建代碼生成器可以很簡(jiǎn)單 如何通過(guò)T4模板生成代碼 下篇這個(gè)問(wèn)題很多朋友還不知道,今天小六來(lái)為大家解答以上的

關(guān)于代碼生成工具下載,創(chuàng)建代碼生成器可以很簡(jiǎn)單 如何通過(guò)T4模板生成代碼 下篇這個(gè)問(wèn)題很多朋友還不知道,今天小六來(lái)為大家解答以上的問(wèn)題,現(xiàn)在讓我們一起來(lái)看看吧!

1、在《上篇》中我們通過(guò)T4模板為我們指定的數(shù)據(jù)表成功生成了我們需要的用于添加、修改和刪除操作的存儲(chǔ)過(guò)程。

2、但是這是一種基于單個(gè)文件的解決方案,即我們必須為每一個(gè)生成的存儲(chǔ)過(guò)程建立一個(gè)模板。

3、如果我們提供一種基于多文件的代碼生成方式,將會(huì)為編程人員帶來(lái)極大的便利。

4、借助于T4 ToolBox這個(gè)開源工具箱,多文件的SQL Generator的實(shí)現(xiàn)變得異常簡(jiǎn)單。

5、[文中的例子可以從這里下載]目錄二、創(chuàng)建自定義的Generator三、ProcedureGenerator如何被使用?一、多文件代碼生成器會(huì)帶來(lái)多大的便利?我們先來(lái)直觀的感受一下較之《上篇》提供的單一文件的代碼生成器,基于多文件的代碼生成解決方案會(huì)為開發(fā)人員帶來(lái)多大的便利。

6、 同樣對(duì)于《上篇》創(chuàng)建的數(shù)據(jù)表T_PRODUCT,之前我們?yōu)榱松扇齻€(gè)不同的存儲(chǔ)過(guò)程,我們不得已需要?jiǎng)?chuàng)建3個(gè)不同的T4模板文件。

7、實(shí)際上我們更需要的方式只需要?jiǎng)?chuàng)建一個(gè)T4模板,讓我們的SQL Generator自動(dòng)為我們生成3個(gè)包含相應(yīng)存儲(chǔ)過(guò)程的.sql附屬文件,如左圖所示(點(diǎn)擊看大圖)。

8、有的時(shí)候,基于單個(gè)數(shù)據(jù)表的存儲(chǔ)過(guò)程生成方式我們依然覺(jué)得不方便。

9、如果我們能夠在T4模板文件中指定的數(shù)據(jù)表的列表,讓我們的SQL Generator為列表的每一個(gè)數(shù)據(jù)表都生成CUD三個(gè)存儲(chǔ)過(guò)程,這樣的方式更加具有吸引力。

10、如右圖所示(點(diǎn)擊看大圖),一個(gè)訂單模塊包含兩個(gè)具有主子關(guān)系的兩張表(T_ORDER和T_ORDER_DETAIL),現(xiàn)在我們?cè)谝粋€(gè)T4模板中指定這兩個(gè)表明,通過(guò)SQL Generator可以幫助我們生成6個(gè)包含存儲(chǔ)過(guò)程的.sql附屬文件。

11、甚至有的時(shí)候我們連數(shù)據(jù)表列表都無(wú)需指定,讓SQL Generator為所有的表都生成相應(yīng)的存儲(chǔ)過(guò)程。

12、我的例子中沒(méi)有提供這樣的功能,但是實(shí)現(xiàn)自來(lái)不會(huì)存在任何問(wèn)題。

13、二、創(chuàng)建自定義的Generator在《上篇》中我創(chuàng)建了一個(gè)抽象的ProcedureTemplate類,以及三個(gè)基于生成CUD存儲(chǔ)過(guò)程的具體ProcedureTemplate:InsertProcedureTemplate、UpdateProcedureTemplate和DeleteProcedureTemplate。

14、它們都將直接服務(wù)于我們今天將要提供的基于多文件的SQL Generator。

15、在《上篇》中,這四個(gè)Template分別定義在4個(gè)不同的TT文件中,3個(gè)具體的ProcedureTemplate通過(guò)<#@include>指令將抽象ProcedureTemplate模板文件包含過(guò)來(lái)。

16、由于我們將要?jiǎng)?chuàng)建的T4模板將會(huì)使用到這四個(gè)類,如果我們用四個(gè)<#@include>指令將四個(gè)TT文件包含過(guò)來(lái),由于T4引擎將會(huì)導(dǎo)致對(duì)ProcedureTemplate的4次包含,最好將會(huì)導(dǎo)致變異問(wèn)題。

17、個(gè)人覺(jué)得這應(yīng)該算是T4引擎解析包含關(guān)系的一個(gè)局限性,為了解決這個(gè)問(wèn)題我們不得不抽象的ProcedureTemplate和三個(gè)具體的ProcedureTemplate都合并成一個(gè)TT文件。

18、T4 ToolBox為類庫(kù)中為了提供了一個(gè)抽象的T4Toolbox.Generator類用于實(shí)現(xiàn)多文件的代碼生成。

19、為此我們創(chuàng)建一個(gè)TT模板文件,定義了如下一個(gè)繼承自該類的ProcedureGenerator。

20、ProcedureGenerator的核心是通過(guò)屬性Templates定義的類型為IEnumerable的ProcedureTemplate列表,這個(gè)列表在存儲(chǔ)過(guò)程中進(jìn)行初始化。

21、而對(duì)于ProcedureGenerator的構(gòu)造函數(shù),處理定義了一個(gè)表示數(shù)據(jù)庫(kù)連接字符串的databaseName的參數(shù)外,并以數(shù)組參數(shù)的形式指定了生成的存儲(chǔ)過(guò)程基于的數(shù)據(jù)表名的列表。

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"); } }}#>真正的存儲(chǔ)過(guò)程的T-SQL腳本實(shí)現(xiàn)在重寫的RunCore中。

23、由于具體的文本轉(zhuǎn)化邏輯都定義在了ProcedureTemplate中了,所以在這里我們需要遍歷的ProcedureTemplate集合中每一個(gè)Template對(duì)象,調(diào)用RenderToFile方法將相應(yīng)的存儲(chǔ)過(guò)程的腳本寫入以存儲(chǔ)過(guò)程命名同名的.sql文件中。

24、三、ProcedureGenerator如何被使用?我們最后來(lái)看看我們創(chuàng)建的ProcedureGenerator最終如何被應(yīng)用于具體的代碼生成。

25、其實(shí)很簡(jiǎn)單,我們只需要?jiǎng)?chuàng)建相應(yīng)的模板文件,通過(guò)<#@include>將定義ProcedureGenerator類的TT文件包含近來(lái),最后以代碼語(yǔ)句調(diào)用塊(<#StatementCode#>)的形式實(shí)力化該對(duì)象,并調(diào)用Run方法即可。

26、在構(gòu)造函數(shù)中指定數(shù)據(jù)庫(kù)連接字符串的名稱和數(shù)據(jù)表名的列表。

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();#>當(dāng)你代碼生成工作執(zhí)行之后,會(huì)多出一個(gè)與TT文件同名的附屬文件,你需要手工刪除掉它。

29、從數(shù)據(jù)到代碼--通過(guò)代碼生成機(jī)制實(shí)現(xiàn)強(qiáng)類型編程[上篇]從數(shù)據(jù)到代碼--通過(guò)代碼生成機(jī)制實(shí)現(xiàn)強(qiáng)類型編程[下篇]從數(shù)據(jù)到代碼--基于T4的代碼生成方式創(chuàng)建代碼生成器可以很簡(jiǎn)單:如何通過(guò)T4模板生成代碼?[上篇]。

本文分享完畢,希望對(duì)大家有所幫助。

標(biāo)簽:

免責(zé)聲明:本文由用戶上傳,如有侵權(quán)請(qǐng)聯(lián)系刪除!

最新文章