1. 什么是 T4 模板
T4(Text Template Transformation Toolkit)是Visual Studio模板驱动的代码生成引擎,用于生成各种可执行文件和代码文件。
1.1 T4 模板的作用
通过T4模板,可以让开发人员根据自己的需求快速生成一些固定格式的代码,例如:ORM代码、DTO代码等。
1.2 T4 模板的优点
1)高效简便:T4模板可以在较短的时间内生成大量代码;
2)易于维护:当一个模板被修改后,生成的所有代码都将随之更新;
3)提高代码可读性:通过T4模板,可以生成符合规范的代码,并且大大减少编码时的重复工作。
2. T4 模板驱动的 MSSQL 数据库开发
T4模板可以快速生成数据库访问框架的代码,可以减少程序员的开发时间,提高开发效率,下面我们来介绍如何使用T4模板快速驱动MSSQL数据库开发。
2.1 安装 T4 模板
首先需要在Visual Studio中安装T4 Toolbox插件,安装方法如下:
Tools -> Extensions and Updates -> Online -> Search ‘T4 Toolbox’ -> Click Download -> Install
2.2 创建T4模板
步骤如下:
在Visual Studio中打开解决方案,右键单击解决方案,选择"添加",然后选择"新建项目";
选择Visual C# > 工具,然后选择“Text Template”;
在"名称"下输入文件名T4模板,将".txt"扩展名改为".tt",并选择"添加"。
2.3 编辑 T4 模板
这里以生成存储过程对应的类为例,详细介绍T4模板的编辑过程。
(1) 模板文件中要使用 System.Data.SqlClient 命名空间,需要导入该命名空间。
using System.Data.SqlClient;
(2) 定义 DB 名称和连接字符串,供后续使用。
string dbName = "数据库名称";
string connStr = "Data Source=.;Initial Catalog=" + dbName + ";Integrated Security=True";
(3) 查询存储过程的元数据信息。
string sql = "select name,OBJECT_DEFINITION(object_id) as text from sys.procedures where name like 'usp_%'";
DataTable table = new DataTable();
using (SqlConnection connection = new SqlConnection(connStr))
{
connection.Open();
SqlCommand command = new SqlCommand(sql, connection);
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(table);
}
(4) 生成 C# 类。
public class StoredProcedureInfo
{
public string Name { get; set; }
public string Text { get; set; }
}
public List<StoredProcedureInfo> storedProcedures = new List<StoredProcedureInfo>();
foreach(DataRow row in table.Rows)
{
string name = row["name"].ToString();
string text = row["text"].ToString();
storedProcedures.Add(new StoredProcedureInfo { Name = name, Text = text });
}
<#
foreach(var procedure in storedProcedures)
{
string className = procedure.Name.Replace("usp_", "");// 去掉"usp_"前缀后,作为该类的名称
string[] lines = procedure.Text.Split('\n');// 获取存储过程的文本,按照行拆分
// 生成类
#>public class <#= className #>
{
<#
foreach(var line in lines)
{
if(line.Trim().StartsWith("@"))
{
string[] parts = line.Trim().Split(' ');
string paramName = parts[0].Substring(1);
string paramType = "object";// 默认类型为object
if(parts.Length >= 3)// 包含类型信息
{
paramType = parts[2];
switch(paramType)
{
case "bigint":
case "int":
case "smallint":
case "bit":
case "decimal":
case "float":
case "real":
case "tinyint":
case "uniqueidentifier":
case "money":
case "date":
case "datetime":
case "datetime2":
case "datetimeoffset":
// 按照指定类型生成属性
#>public <#= paramType #> <#= paramName #> { get;set; }
<#
break;
default:// 其他情况默认为字符串类型
#>public string <#= paramName #> { get;set; }
<#
break;
}
}
else// 没有类型信息,默认为字符串类型
{
#>public string <#= paramName #> { get;set; }
<#
}
}
}
#>
}
<#
}
#>
2.4 生成代码
完成 T4 模板 编辑后,可以直接在 Visual Studio 中生成代码。将 T4 模板 文件拖动到 Visual Studio 中打开该文件,右键单击代码窗口中的任意位置,选择“运行自定义工具”,即可生成代码。
3. 总结
通过T4模板,可以快速生成大量代码,方便开发人员进行开发。本文以生成存储过程对应的类为例,详细介绍了T4模板的编辑过程。使用T4模板能够提高开发效率,减少编码时的重复工作,是一种非常实用的开发工具。