.NET 上的 T4 模版使用
最近工作上有個需求,就是要不斷的產生相同的 SQL Script,只是裡面塞的內容會有所不同,用手工藝產生最為簡單但也最浪費時間,而這時 T4 技術就是一個很適合的選擇,它可以利用 template 的方式填入諸如程式碼、SQL Script 的格式,然後在裡面插入變數,最後產出文字結果。例如下列 SQLTextTemplate.tt 的範例
<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<# int a =0; #>
IF NOT EXISTS (SELECT 1 FROM [dbo].[TestTable] WHERE ID = <#= ID #>)
BEGIN
INSERT INTO [dbo].[TestTable] (ID, Name, [Description]) VALUES (<#= ID #>, '<#= Name #>', '<#= Desc #>');
END;
不看最上面的宣告,底下可以看出這是一個 insert 的 SQL 語法,只是中間用 <#= variable #>
的方式插入變數,用來動態產生 SQL 語法。需注意的是,在新增 T4 檔案時,”自訂工具屬性” 要從 TextTemplatingFileGenerator
改為 TextTemplatingFilePreprocessor
。
接下來為 T4 新增變數,所以需要宣告相對應的類別,程式碼如下:
public partial class SQLTextTemplate
{
public string ID { get; set; }
public string Name { get; set; }
public string Desc { get; set; }
}
之後是產出文字結果:
SQLTextTemplate sQTTextTemplate = new SQLTextTemplate
{
ID = "3",
Name = "aaa3",
Desc = "aaa4"
};
string result = sQTTextTemplate.TransformText();
Console.WriteLine(result);
T4 是個相當好用的技術,雖然是個老技術,但直到現在依然實用
參考資料