你的位置:首页 > 软件开发 > ASP.net > ToolsCodeTemplate使用

ToolsCodeTemplate使用

发布时间:2016-12-21 21:00:20
最近学习使用CodeSmith代码生成器CodeSmith 是一种语法类似于asp.net的基于模板的代码生成器,程序可以自定义模板,从而减少重复编码的劳动量,提高效率。作用:CodeSmith 是一种基于模板的代码生成工具,它使用类似于ASP.NET的语法来生成任意类型的代码或 ...

最近学习使用CodeSmith代码生成器

CodeSmith 是一种语法类似于get='_blank'>asp.net的基于模板的代码生成器,程序可以自定义模板,从而减少重复编码的劳动量,提高效率。

作用:CodeSmith 是一种基于模板的代码生成工具,它使用类似于ASP.NET的语法来生成任意类型的代码或文本。与其他许多代码生成工具不同,CodeSmith 不要求您订阅特定的应用程序设计或体系结构。使用 CodeSmith,可以生成包括简单的强类型集合和完整应用程序在内的任何东西。

当您生成应用程序时,您经常需要重复完成某些特定的任务,例如编写数据访问代码或者生成自定义集合。CodeSmith 在这些时候特别有用,因为您可以编写模板自动完成这些任务,从而不仅提高您的工作效率,而且能够自动完成那些最为乏味的任务。CodeSmith 附带了许多模板,包括对应于所有 .NET 集合类型的模板以及用于生成存储过程的模板,但该工具的真正威力在于能够创建自定义模板。

应用:CodeSmith 是一种语法类似于asp.net的基于模板的代码生成器,程序可以自定义模板,从而减少重复编码的劳动量,提高效率。

安装CodeSmith 2.6注册后发现有两个可运行程序CodeSmith Studio.exe和CodeSmith Explorer.exe

CodeSmith Studio.exe用来创建自定义模板

CodeSmith Explorer.exe用来导入模板并且生成代码

打开 CodeSmith Studio.exe,新建一个C#模板。发现有如下类似与asp.net的标识符号

<% %>

<%= %>

<%@ %>

<script runat="template"> </script>

官方站点:http://www.codesmithtools.com/

下面是使用CodeSmith常用的方法

ToolsCodeTemplate使用ToolsCodeTemplate使用
 1 using System; 2 using SchemaExplorer; 3 using System.Data; 4 using CodeSmith.Engine; 5 using System.Text.RegularExpressions; 6  7 /// <summary> 8 /// CodeSmith公用方法类 9 /// </summary> 10 public class ToolsCodeTemplate:CodeTemplate 11 { 12   #region 获取Molde类名称 13   /// <summary> 14   /// 获取Molde类名称 15   /// </summary> 16   /// <param name="table">表</param> 17   /// <returns>表名称(表名称即为Model类名称)</returns> 18   public string GetModelClassName(TableSchema table) 19   { 20     string result; 21     if ( table.ExtendedProperties.Contains("ModelName") ) 22     { 23       result = (string)table.ExtendedProperties["ModelName"].Value;   24       return MakePascal(result); 25     } 26    27     if (table.Name.EndsWith("s")) 28     { 29       result = MakeSingle(table.Name); 30     } 31     else 32     { 33       result = table.Name; 34     } 35      36     return MakePascal(result); 37   }  38   #endregion 39    40   #region 获取属性名称 41   /// <summary> 42   /// 获取属性名称 43   /// </summary> 44   /// <param name="column"></param> 45   /// <returns></returns> 46   public string GetPropertyName(ColumnSchema column) 47   { 48     return MakePascal(GetNameFromDBFieldName(column)); 49   } 50   #endregion 51    52   #region 获取从数据库字段得到的名称 53   /// <summary> 54   /// 获取从数据库字段得到的名称 55   /// </summary> 56   /// <param name="column"></param> 57   /// <returns></returns> 58   public string GetNameFromDBFieldName(ColumnSchema column) 59   { 60     return column.Name; 61   } 62   #endregion 63    64   #region 获取属性类型 65   /// <summary> 66   /// 获取属性类型 67   /// </summary> 68   /// <param name="column">列</param> 69   /// <returns>属性类型</returns> 70   public string GetPropertyType(ColumnSchema column) 71   { 72     return GetCSharpTypeFromDBFieldType(column); 73   } 74   #endregion 75    76   #region 获取主键名称 77   /// <summary> 78   /// 获取主键名称 79   /// </summary> 80   /// <param name="TargetTable">表</param> 81   /// <returns>主键名称</returns> 82   public string GetPKName(TableSchema TargetTable) 83   { 84     if (TargetTable.PrimaryKey != null) 85     { 86       if (TargetTable.PrimaryKey.MemberColumns.Count == 1) 87       { 88         return TargetTable.PrimaryKey.MemberColumns[0].Name; 89       } 90       else 91       { 92         throw new Exception("This template will not work on primary keys with more than one member column."); 93       } 94     } 95     else 96     { 97       throw new Exception("This template will only work on tables with a primary key."); 98     } 99   }100   #endregion101   102   #region 获取主键类型103   /// <summary>104   /// 获取主键类型105   /// </summary>106   /// <param name="TargetTable">表</param>107   /// <returns>主键类型</returns>108   public string GetPKType(TableSchema TargetTable)109   {110     if (TargetTable.PrimaryKey != null)111     {112       if (TargetTable.PrimaryKey.MemberColumns.Count == 1)113       {114         return GetCSharpTypeFromDBFieldType(TargetTable.PrimaryKey.MemberColumns[0]);115       }116       else117       {118         throw new ApplicationException("This template will not work on primary keys with more than one member column.");119       }120     }121     else122     {123       throw new ApplicationException("This template will only work on MyTables with a primary key.");124     }125   }126   #endregion127   128   #region 类型转化129   /// <summary>130   /// 获取数据库类型转化为C#类型131   /// </summary>132   /// <param name="column">列</param>133   /// <returns>C#类型的字符串</returns>134   public string GetCSharpTypeFromDBFieldType(ColumnSchema column)135   {136     if (column.Name.EndsWith("TypeCode")) return column.Name;137     string type;138     switch (column.DataType)139     {140       case DbType.AnsiString: type= "string";break;141       case DbType.AnsiStringFixedLength: type= "string";break;142       case DbType.Binary: type= "byte[]";break;143       case DbType.Boolean: type= "bool";break;144       case DbType.Byte: type= "byte";break;145       case DbType.Currency: type= "decimal";break;146       case DbType.Date: type= "DateTime";break;147       case DbType.DateTime: type= "DateTime";break;148       case DbType.Decimal: type= "decimal";break;149       case DbType.Double: type= "double";break;150       case DbType.Guid: type= "Guid";break;151       case DbType.Int16: type= "short";break;152       case DbType.Int32: type= "int";break;153       case DbType.Int64: type= "long";break;154       case DbType.Object: type= "object";break;155       case DbType.SByte: type= "sbyte";break;156       case DbType.Single: type= "float";break;157       case DbType.String: type= "string";break;158       case DbType.StringFixedLength: type= "string";break;159       case DbType.Time: type= "TimeSpan";break;160       case DbType.UInt16: type= "ushort";break;161       case DbType.UInt32: type= "uint";break;162       case DbType.UInt64: type= "ulong";break;163       case DbType.VarNumeric: type= "decimal";break;164       default:165       {166         type= "__UNKNOWN__" + column.NativeType;//未知167         break;168       }169     }170     //是否为Null171     if(column.AllowDBNull && column.SystemType.IsValueType)172     {173       type=type+"?";174     }175     return type;176   }177   /// <summary>178   /// 获取数据库类型转化为C#类型179   /// </summary>180   /// <param name="dbType">DbType的类型</param>181   /// <returns>C#类型的字符串</returns>182   public string GetDBTypeToCSharpType (System.Data.DbType dbType)183   {184     switch (dbType)185     {186       case DbType.AnsiString:return "string";187       case DbType.AnsiStringFixedLength:return "string";188       case DbType.Binary:return "byte[]";189       case DbType.Boolean:return "bool";190       case DbType.Byte:return "byte";191       case DbType.Currency:return "decimal";192       case DbType.Date:return "DateTime";193       case DbType.DateTime:return "DateTime";194       case DbType.DateTime2:return "DateTime";195       case DbType.DateTimeOffset:return "DateTime";196       case DbType.Decimal:return "decimal";197       case DbType.Double:return "double";198       case DbType.Guid:return "Guid";199       case DbType.Int16:return "short";200       case DbType.Int32:return "int";201       case DbType.Int64:return "long";202       case DbType.Object:return "object";203       case DbType.SByte:return "sbyte";204       case DbType.Single:return "float";205       case DbType.String:return "string";206       case DbType.StringFixedLength:return "string";207       case DbType.Time:return "DateTime";208       case DbType.UInt16:return "ushort";209       case DbType.UInt32:return "uint";210       case DbType.UInt64:return "ulong";211       case DbType.VarNumeric:return "decimal";212       case DbType.return "string";213       default:return "object";214     }215   }216   #endregion217   218   #region 骆驼命名法,帕斯卡命名法和匈牙利命名法219   /// <summary>220   /// 获取首字母大写的字符串221   /// </summary>222   /// <param name="value">字符串(例如:xiangyisheng)</param>223   /// <returns>xiangyisheng => Xiangyisheng</returns>224   public string MakePascal(string value)225   {226     return value.Substring(0, 1).ToUpper() + value.Substring(1);227   }228   /// <summary>229   /// 获取首字母小写的字符串230   /// </summary>231   /// <param name="value">字符串(例如:Xiangyisheng)</param>232   /// <returns>Xiangyisheng => xiangyisheng</returns>233   public string MakeCamel(string value)234   {235     return value.Substring(0, 1).ToLower() + value.Substring(1);236   }237   /// <summary>238   /// 获取小写的字符串239   /// </summary>240   /// <param name="value">字符串(例如:XiangYiSheng)</param>241   /// <returns>XiangYiSheng => xiangyisheng</returns>242   public string MakeSmall(string value)243   {244     return value.ToLower();245   }  246   /// <summary>247   /// 获取单数形式的字符串248   /// </summary>249   /// <param name="name">字符串(例如:Xiangyishengs)</param>250   /// <returns>Xiangyishengs => Xiangyisheng</returns>251   public string MakeSingle(string name)252   {253     Regex plural1 = new Regex("(?<keep>[^aeiou])ies$");254     Regex plural2 = new Regex("(?<keep>[aeiou]y)s$");255     Regex plural3 = new Regex("(?<keep>[sxzh])es$");256     Regex plural4 = new Regex("(?<keep>[^sxzhyu])s$");257   258     if(plural1.IsMatch(name))259       return plural1.Replace(name, "${keep}y");260     else if(plural2.IsMatch(name))261       return plural2.Replace(name, "${keep}");262     else if(plural3.IsMatch(name))263       return plural3.Replace(name, "${keep}");264     else if(plural4.IsMatch(name))265       return plural4.Replace(name, "${keep}");266   267     return name;268   }269   /// <summary>270   /// 获取复数形式的字符串271   /// </summary>272   /// <param name="name">字符串(例如:Xiangyisheng)</param>273   /// <returns>Xiangyisheng => Xiangyishengs</returns>274   public string MakePlural(string name)275   {276     Regex plural1 = new Regex("(?<keep>[^aeiou])y$");277     Regex plural2 = new Regex("(?<keep>[aeiou]y)$");278     Regex plural3 = new Regex("(?<keep>[sxzh])$");279     Regex plural4 = new Regex("(?<keep>[^sxzhy])$");280   281     if(plural1.IsMatch(name))282       return plural1.Replace(name, "${keep}ies");283     else if(plural2.IsMatch(name))284       return plural2.Replace(name, "${keep}s");285     else if(plural3.IsMatch(name))286       return plural3.Replace(name, "${keep}es");287     else if(plural4.IsMatch(name))288       return plural4.Replace(name, "${keep}s");289   290     return name;291   }292   #endregion293   294   #region 打印标题295   /// <summary>296   /// 打印标题297   /// </summary>298   public void PrintHeader()299   {300     Response.WriteLine("//============================================================");301     Response.WriteLine("//http://www.cnblogs.com/xiangyisheng");302     Response.WriteLine("//============================================================");303     Response.WriteLine();304   }305   #endregion306 }

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:ToolsCodeTemplate使用

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录