使用

  • 初始化准备

获取MultipleOutputHelper.ttinclude文件代码

描述:找不到的同学可以通过Github.com直通车托管上获取(https://github.com/damieng/DamienGKit/blob/master/T4/MultipleOutputHelper/MultipleOutputHelper.ttinclude)

在T4模板中使用include指令导入MultipleOutputHelper.ttinclude文件或者将MultipleOutputHelper.ttinclude的代码复制在T4模板内。

  • 加载代码如下
 <#@include file="$(ProjectDir)\MultipleOutputHelper.ttinclude"#> 

场景应用

  • 自定义T4模板文件,文件名为“Template.tt”,具体代码如下:
  1 <#@ template language="C#" hostspecific="True" debug="false"#>
  2 <#@include file="$(ProjectDir)\DBHelper\DbEntity.ttinclude"#>
  3 <#@ assembly name="System" #>
  4 <#@ assembly name="System.Core" #>
  5 <#@ assembly name="System.Data" #>
  6 <#@ assembly name="System.Data.DataSetExtensions" #>
  7 <#@ import namespace="System" #>
  8 <#@ import namespace="System.Data" #>
  9 <#@ import namespace="System.Data.SqlClient" #>
 10 <# var manager = Manager.Create(Host, GenerationEnvironment); #>
 11 <#
 12   //你的当前model的命名空间
 13             string ModelNameSpace="Snail.Entity";
 14             string copyright="一介布衣乄";
 15             string version="V1.0";
 16             string author="Allon";
 17
 18   //你的数据库连接字符串
 19            string ConnectStr = "Data Source";
 20             SqlConnection MySqlConnection = new SqlConnection(ConnectStr);
 21             //此sql语句找到你指定数据库下的所有表
 22             string SelectYourTableNameStr = "SELECT * FROM sys.sysobjects WHERE TYPE='U'";
 23             SqlDataAdapter MySqlDataAdapter = new SqlDataAdapter(SelectYourTableNameStr, MySqlConnection);
 24             DataSet MyDataSet = new DataSet();
 25             MySqlDataAdapter.Fill(MyDataSet, "cacheTable");
 26             //得到table表
 27             DataTable MyDataTable = MyDataSet.Tables["cacheTable"];
 28             int MyDataTableRowsCount = MyDataTable.Rows.Count;
 29             for (int i = 0; i < MyDataTableRowsCount; i++)
 30             {
 31                 //表名
 32                 //MyDataTable.Rows[i]["name"].ToString();
 33                 //此sql语句找到你当前表下的所有键值,属性,是否为null,长度。
 34                 string SelectYourKeyStr = "SELECT [col].[COLUMN_NAME] AS keyname,"+
 35                                           "    [col].[DATA_TYPE] AS keyproperty,"+
 36                                           "    [col].[CHARACTER_OCTET_LENGTH] AS [length],"+
 37                                           "    CASE [col].[IS_NULLABLE]"+
 38                                           "        WHEN 'YES' THEN"+
 39                                           "            1"+
 40                                           "        ELSE"+
 41                                           "            0"+
 42                                           "    END AS isnullable,"+
 43                                           "    CASE"+
 44                                           "        WHEN [ccu].[CONSTRAINT_NAME] IS NOT NULL THEN"+
 45                                           "            1"+
 46                                           "        ELSE"+
 47                                           "            0"+
 48                                           "    END AS IsPrimaryKey,"+
 49                                           "    COLUMNPROPERTY(OBJECT_ID('"+ MyDataTable.Rows[i]["name"].ToString() + "'), [col].[COLUMN_NAME], 'IsIdentity') AS IsIdentity"+
 50                                           "    FROM [INFORMATION_SCHEMA].[COLUMNS] col"+
 51                                           "     LEFT JOIN [INFORMATION_SCHEMA].[CONSTRAINT_COLUMN_USAGE] ccu"+
 52                                           "         ON [ccu].[TABLE_NAME] = [col].[TABLE_NAME]"+
 53                                           "            AND [ccu].[COLUMN_NAME] = [col].[COLUMN_NAME]"+
 54                                           "            AND [ccu].[CONSTRAINT_NAME] LIKE 'PK_%'"+
 55                                           " WHERE [col].[TABLE_NAME] = '"+ MyDataTable.Rows[i]["name"].ToString() + "'";
 56
 57                 MySqlDataAdapter = new SqlDataAdapter(SelectYourKeyStr, MySqlConnection);
 58                  MyDataSet = new DataSet();
 59                 MySqlDataAdapter.Fill(MyDataSet, "cacheTable");
 60                 //得到key表
 61                 DataTable MyKeyTable = MyDataSet.Tables["cacheTable"];
 62                 //tt模板输出文件
 63                 manager.StartNewFile(MyDataTable.Rows[i]["name"].ToString() +".cs");
 64 #>
 65 //-----------------------------------------------------------------------
 66 // * Copyright (C) <#= copyright  #>
 67 // * Version : <#= version #>
 68 // * Author  : <#= author #>
 69 // * FileName: <#= MyDataTable.Rows[i]["name"] #>.cs
 70 // * History : Created by T4 <#= DateTime.Now #>
 71 // </copyright>
 72 //-----------------------------------------------------------------------
 73 using System;
 74 namespace <#=ModelNameSpace#>
 75 {
 76     public class <#=MyDataTable.Rows[i]["name"].ToString()#>
 77     {
 78 <#              for (int keyi = 0; keyi < MyKeyTable.Rows.Count; keyi++)
 79                 {
 80                    string keypropertyOutput = string.Empty;
 81                     string isKey=string.Empty;
 82                         if(MyKeyTable.Rows[keyi]["IsPrimaryKey"].ToString()=="1" && MyKeyTable.Rows[keyi]["IsIdentity"].ToString()=="1"){
 83                             isKey=", IsPrimaryKey = true, IsIdentity = true";
 84                         }else if(MyKeyTable.Rows[keyi]["IsPrimaryKey"].ToString()=="1"){
 85                 isKey=", IsPrimaryKey = true";
 86                          }
 87                     switch (MyKeyTable.Rows[keyi]["keyproperty"].ToString().ToLower())
 88                     {
 89                         case "smallint":
 90                             keypropertyOutput = "short";
 91                             break;
 92                         case "int":
 93                             keypropertyOutput = "int";
 94                             break;
 95                         case "bigint":
 96                             keypropertyOutput = "long";
 97                             break;
 98                         case "real":
 99                             keypropertyOutput = "float";
100                             break;
101                         case "float":
102                             keypropertyOutput = "double";
103                             break;
104                         case "money":
105                             keypropertyOutput = "decimal";
106                             break;
107                         case "datetime":
108                             keypropertyOutput = "DateTime";
109                             break;
110                         case "uniqueidentifier":
111                             keypropertyOutput = "Guid";
112                             break;
113
114                         case "bit":
115                             keypropertyOutput = "bool";
116                             break;
117                         case "tinyint":
118                             keypropertyOutput = "byte";
119                             break;
120                         case "image":
121                             keypropertyOutput = "byte[]";
122                             break;
123                         case "binary":
124                             keypropertyOutput = "byte[]";
125                             break;
126                         default:
127                             keypropertyOutput = "string";
128                                 break;
129                     }
130                     //可为null且不是string(就是值类型)可以加?
131                     if (MyKeyTable.Rows[keyi]["isnullable"].ToString()=="1"&& keypropertyOutput!="string")
132                     {
133                         if (keypropertyOutput == "byte[]")
134                         {
135                             keypropertyOutput = "byte?[]";
136                         }
137                         else
138                         {
139                             keypropertyOutput = keypropertyOutput + "?";
140                         }
141                     }
142 #>
143
144        public  <#=keypropertyOutput#>  <#=MyKeyTable.Rows[keyi]["keyname"].ToString()#>  { get; set; }
145 <#
146                 }
147 #>
148     }
149 }
150 <#              //代码结束
151                 manager.EndBlock();
152         MySqlConnection.Close();
153             }
154 #>
155 <# manager.Process(true); #>
  • 输出文件预览:
12-19 22:02