T4模板是一种代码生成器,可以通过套用设置好的模板快速生成代码,本文将介绍如何通过T4模板快速生成数据库的表映射实体类,学会这个方法,再也不用烦心于codefirst要一个一个添加字段的无聊事情当中了!
首先我们新建一个类库,右键项目-添加-新增项,在搜索栏中搜索T4,如下图:
选择文本模板,名称这里我们命名为EntitiesTemplate,点击添加。
添加完成后我们再新增一个模板帮助类TempHelper,如下:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
public class TempHelper
{
//数据库连接字符串(web.config来配置)
public const string connStr = "Server=***.***.**.***;Database=***;uid=**;pwd=******;";
public static string nspace = "MyMis";
/// <summary>
/// 执行SQL语句返回DS
/// </summary>
/// <param name="cmdText">SQL语句</param>
/// <returns>DS</returns>
public static DataSet ExecuteQuery(string cmdText)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
DataSet ds = new DataSet();
try
{
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(cmdText, conn);
da.Fill(ds, "ds");
}
catch (System.Data.SqlClient.SqlException e)
{
//conn.Close();
throw new Exception(e.Message);
}
finally
{
//conn.Dispose();
//conn.Close();
}
return ds;
}
}
/// <summary>
/// 从数据库中去除表字段的详细信息
/// </summary>
/// <param name="tbName">表名</param>
/// <returns></returns>
public static List<DBModel> GetDBmodel(string tbName)
{
StringBuilder sb = new StringBuilder();
sb.Append("SELECT");
sb.Append(" table_name = Case When A.colorder=1 Then D.name Else '' End,");
sb.Append(" table_Directions = Case When A.colorder=1 Then isnull(F.value,'') Else '' End,");
sb.Append(" field_index = A.colorder,");
sb.Append(" field_name = A.name,");
sb.Append(" field_Directions = isnull(G.[value],''),");
sb.Append(" tag = Case When COLUMNPROPERTY( A.id,A.name,'IsIdentity')=1 Then '√'Else '' End,");
sb.Append(" iskey = Case When exists(SELECT 1 FROM sysobjects Where xtype='PK' and parent_obj=A.id and name in (");
sb.Append(" SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = A.id AND colid=A.colid))) then 'True' else 'False' end,");
sb.Append(" field_type = B.name,");
sb.Append(" field_size = A.Length,");
sb.Append