霽彩華年,因夢同行—— 慶祝深圳霽因生物醫(yī)藥轉(zhuǎn)化研究院成立十周年 情緒益生菌PS128助力孤獨癥治療,權(quán)威研究顯示可顯著改善孤獨癥癥狀 PARP抑制劑氟唑帕利助力患者從維持治療中獲益,改寫晚期卵巢癌治療格局 新東方智慧教育發(fā)布“東方創(chuàng)科人工智能開發(fā)板2.0” 精準(zhǔn)血型 守護生命 腸道超聲可用于檢測兒童炎癥性腸病 迷走神經(jīng)刺激對抑郁癥有積極治療作用 探索梅尼埃病中 MRI 描述符的性能和最佳組合 自閉癥患者中癡呆癥的患病率增加 超聲波 3D 打印輔助神經(jīng)源性膀胱的骶神經(jīng)調(diào)節(jié) 胃食管反流病患者耳鳴風(fēng)險增加 間質(zhì)性膀胱炎和膀胱疼痛綜合征的臨床表現(xiàn)不同 研究表明 多語言能力可提高自閉癥兒童的認(rèn)知能力 科學(xué)家揭示人類與小鼠在主要癌癥免疫治療靶點上的驚人差異 利用正確的成像標(biāo)準(zhǔn)改善對腦癌結(jié)果的預(yù)測 地中海飲食通過腸道細(xì)菌變化改善記憶力 讓你在 2025 年更健康的 7 種驚人方法 為什么有些人的頭發(fā)和指甲比其他人長得快 物質(zhì)的使用會改變大腦的結(jié)構(gòu)嗎 飲酒如何影響你的健康 20個月,3大平臺,300倍!元育生物以全左旋蝦青素引領(lǐng)合成生物新紀(jì)元 從技術(shù)困局到創(chuàng)新錨點,天與帶來了一場屬于養(yǎng)老的“情緒共振” “華潤系”大動作落槌!昆藥集團完成收購華潤圣火 十七載“冬至滋補節(jié)”,東阿阿膠將品牌營銷推向新高峰 150個國家承認(rèn)巴勒斯坦國意味著什么 中國海警對非法闖仁愛礁海域菲船只采取管制措施 國家四級救災(zāi)應(yīng)急響應(yīng)啟動 涉及福建、廣東 女生查分查出608分后,上演取得理想成績“三件套” 多吃紅色的櫻桃能補鐵、補血? 中國代表三次回?fù)裘婪焦糁肛?zé) 探索精神健康前沿|情緒益生菌PS128閃耀寧波醫(yī)學(xué)盛會,彰顯科研實力 圣美生物:以科技之光,引領(lǐng)肺癌早篩早診新時代 神經(jīng)干細(xì)胞移植有望治療慢性脊髓損傷 一種簡單的血漿生物標(biāo)志物可以預(yù)測患有肥胖癥青少年的肝纖維化 嬰兒的心跳可能是他們說出第一句話的關(guān)鍵 研究發(fā)現(xiàn)基因檢測正成為主流 血液測試顯示心臟存在排斥風(fēng)險 無需提供組織樣本 假體材料有助于減少靜脈導(dǎo)管感染 研究發(fā)現(xiàn)團隊運動對孩子的大腦有很大幫助 研究人員開發(fā)出診斷 治療心肌炎的決策途徑 兩項研究評估了醫(yī)療保健領(lǐng)域人工智能工具的發(fā)展 利用女子籃球隊探索足部生物力學(xué) 抑制前列腺癌細(xì)胞:雄激素受體可以改變前列腺的正常生長 肽抗原上的反應(yīng)性半胱氨酸可能開啟新的癌癥免疫治療可能性 研究人員發(fā)現(xiàn)新基因療法可以緩解慢性疼痛 研究人員揭示 tisa-cel 療法治療復(fù)發(fā)或難治性 B 細(xì)胞淋巴瘤的風(fēng)險 適量飲酒可降低高危人群罹患嚴(yán)重心血管疾病的風(fēng)險 STIF科創(chuàng)節(jié)揭曉獎項,新東方智慧教育榮膺雙料殊榮 中科美菱發(fā)布2025年產(chǎn)品戰(zhàn)略布局!技術(shù)方向支撐產(chǎn)品生態(tài)縱深! 從雪域高原到用戶口碑 —— 復(fù)方塞隆膠囊的品質(zhì)之旅
您的位置:首頁 >綜合精選 >

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

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

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

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

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

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

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

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

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

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

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

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

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

12、我的例子中沒有提供這樣的功能,但是實現(xiàn)自來不會存在任何問題。

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

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

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

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

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

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

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

20、ProcedureGenerator的核心是通過屬性Templates定義的類型為IEnumerable的ProcedureTemplate列表,這個列表在存儲過程中進行初始化。

21、而對于ProcedureGenerator的構(gòu)造函數(shù),處理定義了一個表示數(shù)據(jù)庫連接字符串的databaseName的參數(shù)外,并以數(shù)組參數(shù)的形式指定了生成的存儲過程基于的數(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"); } }}#>真正的存儲過程的T-SQL腳本實現(xiàn)在重寫的RunCore中。

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

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

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

26、在構(gòu)造函數(shù)中指定數(shù)據(jù)庫連接字符串的名稱和數(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í)行之后,會多出一個與TT文件同名的附屬文件,你需要手工刪除掉它。

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

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

標(biāo)簽:

免責(zé)聲明:本文由用戶上傳,與本網(wǎng)站立場無關(guān)。財經(jīng)信息僅供讀者參考,并不構(gòu)成投資建議。投資者據(jù)此操作,風(fēng)險自擔(dān)。 如有侵權(quán)請聯(lián)系刪除!

最新文章