T4模板使用(三):根据数据库生成文件
作为t4模板的常驻用途之一,根据数据库生成相应文件会比较多用到,这篇就写一下如何使用数据库生成操作文件
本篇以entity为例,如需service自行比照。
先添加模板指令
<#@ template debug="false" hostspecific="true" language="C#" #>
引入所用类库
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ assembly name="System.Data" #>
<#@ import namespace="System.Data.SqlClient" #>
代码块
<#
var ModelName = “”;//命名空间
var manager = new Manager(Host, GenerationEnvironment, true) { OutputPath = OutputPath };
var constr = "链接字符串";
using(SqlConnection conn = new SqlConnection(constr)){
conn.Open();
System.Data.DataTable schema = conn.GetSchema("TABLES"); //获取表
foreach(System.Data.DataRow row in schema.Rows){
manager.StartBlock(row["TABLE_NAME"]+".cs");//表名生成文件名
//开始
#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace <#=ModelName#>
{
public class <#=row["TABLE_NAME"].ToString()#>
{
<#
string[] restrictionValues = new string[4];
restrictionValues[0] = null; // Catalog
restrictionValues[1] = null; // Owner
restrictionValues[2] = row["TABLE_NAME"].ToString(); // Table
restrictionValues[3] = null; // Column
var getColumn = conn.GetSchema(SqlClientMetaDataCollectionNames.Columns,restrictionValues);
foreach(System.Data.DataRow column in getColumn.Rows)
{
var name = column["COLUMN_NAME"];//列名
var type = column["DATA_TYPE"]; //数据库保存类型,这里我只封装了slqserver转c#类型,如果其他数据库请自己查询资料进行封账
var sharpType = manager.GetCSharpType(type.ToString());
var sType = column["IS_NULLABLE"].ToString() == "NO" ? sharpType:"Nullable<"+sharpType+">";
#>
public <#=sType#> <#=name#> { get; set;}
<#
}
#>
}
}
<#
//关闭块
manager.EndBlock();
}
}
manager.Process(true);
#>