最近这段时间特忙,公事私事,忙得有时都没时间打开电脑了,这两周只能尽量更新,以后再将章节补回来。
直接进入主题,通过上一章节,大家明白了怎么使用模板类编写T4模板,本章进的是一些简单技巧的应用
1、首先创建一个Test2.tt模板
2、然后修改模板内容为下面代码
这些代码与上一章最后面的那个差不多,只是修改了输出文件名、命名空间、类名、类属性(partial)和一个单例获取函数
1 <#@ template debug="false" hostspecific="True" language="C#" #> 2 <#@ output extension=".cs" encoding="utf-8" #> 3 <#@ include file="SQLServer.ttinclude" #> 4 <#@ include file="MultipleOutputHelper.ttinclude"#> 5 6 <# 7 //获取所有表与视图 8 var tables = LoadTables(); 9 //创建多文件生成实体10 var manager = Manager.Create(Host, GenerationEnvironment); 11 12 //遍历所有表13 foreach(var tbl in tables){14 //判断当前表名是否是禁用名称(禁用的名称可以在Settings.ttinclude文件的ExcludeTables字符串数据中进行添加)15 if(!ExcludeTables.Contains(tbl.Name))16 {17 // 设置输出的文件名18 manager.StartNewFile(tbl.ClassName+"Bll.cs");19 #> 20 using System;21 22 namespace Solution.Logic {23 24 public partial class <#=tbl.CleanName#>Bll {25 26 #region 单例模式27 //定义单例实体28 PRivate static <#=tbl.Name#>Bll _<#=tbl.Name#>Bll = null;29 30 /// <summary>31 /// 获取本逻辑类单例32 /// </summary>33 /// <returns></returns>34 public static <#=tbl.Name#>Bll GetInstence() {35 if (_<#=tbl.Name#>Bll == null) {36 _<#=tbl.Name#>Bll = new <#=tbl.Name#>Bll();37 }38 return _<#=tbl.Name#>Bll;39 }40 #endregion41 42 }43 44 }45 46 47 <# 48 // 输出文件结束49 manager.EndBlock();50 } //if(!ExcludeTables.Contains(tbl.Name)) 判断结束51 52 }// end foreach53 54 // 执行编译,生成文件55 manager.Process(true); 56 #>
运行模板,测试看看效果
从上面添加函数的方法可以看出,对于常用的函数,都可以在模板中进行添加后,直接生成出来,这样就减少了程序员很大的工作量了
3、用上面方法确实可以解决很大部分的问题,但对于一些特殊的函数直接这样写就不行了,比如我们想生成一个删除指定外键Id的函数,由于有的表有外键有的没有,那么就要用上一些简单的判断来处理了
1 <#@ template debug="false" hostspecific="True" language="C#" #> 2 <#@ output extension=".cs" encoding="utf-8" #> 3 <#@ include file="SQLServer.ttinclude" #> 4 <#@ include file="MultipleOutputHelper.ttinclude"#> 5 6 <# 7 //获取所有表与视图 8 var tables = LoadTables(); 9 //创建多文件生成实体10 var manager = Manager.Create(Host, GenerationEnvironment); 11 12 //遍历所有表13 foreach(var tbl in tables){14 //判断当前表名是否是禁用名称(禁用的名称可以在Settings.ttinclude文件的ExcludeTables字符串数据中进行添加)15 if(!ExcludeTables.Contains(tbl.Name))16 {17 // 设置输出的文件名18 manager.StartNewFile(tbl.ClassName+"Bll.cs");19 #> 20 using System;21 using Solution.Dataaccess.DataModel;22 using Solution.DataAccess.DbHelper;23 24 namespace Solution.Logic {25 26 public partial class <#=tbl.CleanName#>Bll {27 28 #region 单例模式29 //定义单例实体30 private static <#=tbl.Name#>Bll _<#=tbl.Name#>Bll = null;31 32 /// <summary>33 /// 获取本逻辑类单例34 /// </summary>35 /// <returns></returns>36 public static <#=tbl.Name#>Bll GetInstence() {37 if (_<#=tbl.Name#>Bll == null) {38 _<#=tbl.Name#>Bll = new <#=tbl.Name#>Bll();39 }40 return _<#=tbl.Name#>Bll;41 }42 #endregion43 44 45 <#46 foreach(var col in tbl.Columns){47 //判断字段名称中是否包含“_Id”这个字符串,且字段类型为int或long的,则生成对应的删除函数48 if (col.CleanName.IndexOf("_Id") >= 0 && (col.SysType == "int" || col.SysType == "long"))49 {50 #>51 #region 删除<#=tbl.Name#>表指定<#=col.CleanName#>的字段值记录52 /// <summary>53 /// 删除<#=tbl.Name#>表指定<#=col.CleanName#>的字段值记录54 /// </summary>55 /// <param name="id">记录的主键值</param>56 public void DeleteBy<#=col.CleanName#>(int id) {57 //删除58 <#=tbl.Name#>.Delete(x => x.<#=col.CleanName#> == id);59 }60 61 /// <summary>62 /// 删除<#=tbl.Name#>表指定<#=col.CleanName#>的字段值记录63 /// </summary>64 /// <param name="id">记录的主键值</param>65 public void DeleteBy<#=col.CleanName#>(int[] id) {66 if (id == null) return;67 //将数组转为逗号分隔的字串68 var str = string.Join(",", id);69 70 //设置Sql语句71 var sql = "delete from <#=tbl.Name#> where <#=col.CleanName#> in (" + str + ")";72 73 //删除74 var deleteHelper = new DeleteHelper();75 deleteHelper.Delete(sql);76 }77 #endregion78 79 <#80 }81 }82 #>83 }84 85 }86 87 88 <# 89 // 输出文件结束90 manager.EndBlock();91 } //if(!ExcludeTables.Contains(tbl.Name)) 判断结束92 93 }// end foreach94 95 // 执行编译,生成文件96 manager.Process(true); 97 #>
运行模板,测试看看效果
4、同理,我们可以通过判断,生成获取指定名称的字段值和生成删除图片函数等,这些都可以根据你的需要去生成
1 <#@ template debug="false" hostspecific="True" language="C#" #> 2 <#@ output extension=".cs" encoding="utf-8" #> 3 <#@ include file="SQLServer.ttinclude" #> 4 <#@ include file="MultipleOutputHelper.ttinclude"#> 5 6 <# 7 //获取所有表与视图 8 var tables = LoadTables(); 9 //创建多文件生成实体 10 var manager = Manager.Create(Host, GenerationEnvironment); 11 12 //遍历所有表 13 foreach(var tbl in tables){ 14 //判断当前表名是否是禁用名称(禁用的名称可以在Settings.ttinclude文件的ExcludeTables字符串数据中进行添加) 15 if(!ExcludeTables.Contains(tbl.Name)) 16 { 17 // 设置输出的文件名 18 manager.StartNewFile(tbl.ClassName+"Bll.cs"); 19 #> 20 using System; 21 using Solution.DataAccess.DataModel; 22 using Solution.DataAccess.DbHelper; 23 24 namespace Solution.Logic { 25 26 public partial class <#=tbl.CleanName#>Bll { 27 28 #region 单例模式 29 //定义单例实体 30 private static <#=tbl.Name#>Bll _<#=tbl.Name#>Bll = null; 31 32 /// <summary> 33 /// 获取本逻辑类单例 34 /// </summary> 35 /// <returns></returns> 36 public static <#=tbl.Name#>Bll GetInstence() { 37 if (_<#=tbl.Name#>Bll == null) { 38 _<#=tbl.Name#>Bll = new <#=tbl.Name#>Bll(); 39 } 40 return _<#=tbl.Name#>Bll; 41 } 42 #endregion 43 44 <# 45 foreach(var col in tbl.Columns){ 46 //判断字段名称中是否包含“_Id”这个字符串,且字段类型为int或long的,则生成对应的删除函数 47 if (col.CleanName.IndexOf("_Id") >= 0 && (col.SysType == "int" || col.SysType == "long")) 48 { 49 #> 50 #region 删除<#=tbl.Name#>表指定<#=col.CleanName#>的字段值记录 51 /// <summary> 52 /// 删除<#=tbl.Name#>表指定<#=col.CleanName#>的字段值记录 53 /// </summary> 54 /// <param name="id">记录的主键值</param> 55 public void DeleteBy<#=col.CleanName#>(int id) { 56 //删除 57 <#=tbl.Name#>.Delete(x => x.<#=col.CleanName#> == id); 58 } 59 60 /// <summary> 61 /// 删除<#=tbl.Name#>表指定<#=col.CleanName#>的字段值记录 62 /// </summary> 63 /// <param name="id">记录的主键值</param> 64 public void DeleteBy<#=col.CleanName#>(int[] id) { 65 if (id == null) return; 66 //将数组转为逗号分隔的字串 67 var str = string.Join(",", id); 68 69 //设置Sql语句 70
新闻热点
疑难解答