为PetaPoco添加实体模板

Brad为我们提供了T4模板,因为公司一直在使用CodeSmith,故为其写了一个CodeSmith的模板,代码如下:

 

  
  
  
  
  1. <%--   
  2. Name:EntityTemplates  
  3. Author:Qi Fei   
  4. Description:Generate a entity file in C#  
  5. --%>  
  6.  
  7. <%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="" Inherits="" Debug="False" Description="" ResponseEncoding="UTF-8" %>  
  8. <%@ Property Name="Namespace" Type="System.String" Default="TianChenMeiKuang.Entity" Optional="False" Category="Strings" Description="实体类命名空间" %>  
  9. <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="源表" %>  
  10. <%@ Assembly Name="SchemaExplorer" %>  
  11. <%@ Assembly Name="System.Data" %>  
  12. <%@ Import Namespace="SchemaExplorer" %>  
  13. <%@ Import Namespace="System.Data" %>  
  14. /**********************************************************  
  15.  Name:<%= GetClassName(SourceTable) %>  
  16.  Author:  
  17.  Date:<%=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") %>  
  18.  Description:  
  19.  Modify Remark:  
  20. **********************************************************/ 
  21. using System;  
  22. using WebApp.Matrix.Data;  
  23.  
  24. namespace <%=Namespace%>  
  25. {  
  26.     /// <summary>  
  27.     /// This Entity is Mapping To [<%=SourceTable.Name%>] Table  
  28.     /// Remark Ignore Attribute for the field when it is not need mapping  
  29.     /// </summary>  
  30.     [Serializable]  
  31.     [TableName("[<%=SourceTable.Name%>]")]  
  32.     <%   
  33.     ColumnSchema primaryKeyColumn = GetPrimaryKeyColumn();  
  34.     if(primaryKeyColumn != null)  
  35.     {  
  36.         if(Convert.ToBoolean(primaryKeyColumn.ExtendedProperties["CS_isIdentity"].Value)==true){ %>  
  37.     [PrimaryKey("<%=primaryKeyColumn.Name%>", autoIncrement=true)]  
  38.         <% }   
  39.         else {  
  40.         %>  
  41.     [PrimaryKey("<%=primaryKeyColumn.Name%>", autoIncrement=false)]  
  42.         <% }  
  43.     }%>  
  44.     public class <%= GetClassName(SourceTable) %>  
  45.     {          
  46.         <% for (int i = 0; i < SourceTable.Columns.Count; i++) { %>  
  47.         /// <summary>  
  48.         /// <%= SourceTable.Columns[i].Name %>  
  49.         /// </summary>  
  50.         public <%= GetCSharpVariableType(SourceTable.Columns[i]) %> <%= GetPropertyName(SourceTable.Columns[i]) %>  
  51.         {  
  52.             getset;  
  53.         }  
  54.         <% if (i < SourceTable.Columns.Count - 1) Response.Write("\r\n"); %>          
  55.         <% } %>  
  56.           
  57.         /// <summary>  
  58.         /// Equals  
  59.         /// </summary>  
  60.         public override bool Equals(object obj)  
  61.         {  
  62.             <%= GetClassName(SourceTable) %> other = obj as <%= GetClassName(SourceTable) %>;  
  63.             if (<%=GetFirstKeyCondition()%>)  
  64.             {  
  65.                 return false;  
  66.             }  
  67.             if (<%=GetTwoKeyCondition()%>)  
  68.             {  
  69.                 return false;  
  70.             }  
  71.             return true;  
  72.         }  
  73.         /// <summary>  
  74.         /// GetHashCode  
  75.         /// </summary>  
  76.         public override int GetHashCode()  
  77.         {  
  78.             return base.GetHashCode();  
  79.         }  
  80.     }  
  81. }  
  82.  
  83. <script runat="template">  
  84. public string GetClassName(TableSchema table)  
  85. {  
  86.     string className = table.Name;  
  87.     return className;  
  88. }  
  89. public string GetPropertyName(ColumnSchema column)  
  90. {  
  91.     string propertyName = column.Name;  
  92.       
  93.     return propertyName;  
  94. }  
  95. public string GetFieldName(ColumnSchema column)  
  96. {  
  97.     string propertyName = column.Name;  
  98.     return propertyName;  
  99. }  
  100. public ColumnSchema GetPrimaryKeyColumn()  
  101. {  
  102.     for (int i = 0; i < SourceTable.Columns.Count; i++)  
  103.     {  
  104.         if(SourceTable.Columns[i].IsPrimaryKeyMember)  
  105.         {  
  106.             return     SourceTable.Columns[i];  
  107.         }  
  108.     }  
  109.     return null;  
  110. }  
  111. public string GetKey()  
  112. {  
  113.     for (int i = 0; i < SourceTable.Columns.Count; i++)  
  114.     {  
  115.         if(SourceTable.Columns[i].IsPrimaryKeyMember)  
  116.         {  
  117.             return     SourceTable.Columns[i].Name;  
  118.         }  
  119.     }  
  120.     return "GetHashCode().ToString()";  
  121. }  
  122. public string GetCSharpVariableType(ColumnSchema column)  
  123. {  
  124.     switch (column.DataType)  
  125.     {  
  126.         case DbType.AnsiString: return "string";  
  127.         case DbType.AnsiStringFixedLength: return "string";  
  128.         case DbType.Binary: return "Nullable<int>";  
  129.         case DbType.Boolean: if(column.AllowDBNull){return "Nullable<bool>";}else{return "bool";};  
  130.         case DbType.Byte: return "int";  
  131.         case DbType.Currency: if(column.AllowDBNull){return "Nullable<decimal>";}else{return "decimal";};  
  132.         case DbType.Date: if(column.AllowDBNull){return "Nullable<DateTime>";}else{return "DateTime";};  
  133.         case DbType.DateTime: if(column.AllowDBNull){return "Nullable<DateTime>";}else{return "DateTime";};  
  134.         case DbType.Decimal: if(column.AllowDBNull){return "Nullable<decimal>";}else{return "decimal";};  
  135.         case DbType.Double: if(column.AllowDBNull){return "Nullable<double>";}else{return "double";};  
  136.         case DbType.Guid: return "Guid";  
  137.         case DbType.Int16: if(column.AllowDBNull){return "Nullable<short>";}else{return "short";};  
  138.         case DbType.Int32: if(column.AllowDBNull){return "Nullable<int>";}else{return "int";};  
  139.         case DbType.Int64: if(column.AllowDBNull){return "Nullable<long>";}else{return "long";};  
  140.         case DbType.Object: return "object";  
  141.         case DbType.SByte: if(column.AllowDBNull){return "Nullable<sbyte>";}else{return "sbyte";};  
  142.         case DbType.Single: if(column.AllowDBNull){return "Nullable<float>";}else{return "float";};  
  143.         case DbType.String: return "string";  
  144.         case DbType.StringFixedLength: return "string";  
  145.         case DbType.Time: if(column.AllowDBNull){return "Nullable<TimeSpan>";}else{return "TimeSpan";};  
  146.         case DbType.UInt16: if(column.AllowDBNull){return "Nullable<ushort>";}else{return "ushort";};  
  147.         case DbType.UInt32: if(column.AllowDBNull){return "Nullable<uint>";}else{return "uint";};  
  148.         case DbType.UInt64: if(column.AllowDBNull){return "Nullable<ulong>";}else{return "ulong";};  
  149.         case DbType.VarNumeric: if(column.AllowDBNull){return "Nullable<decimal>";}else{return "decimal";};  
  150.         default:return "string";  
  151.     }  
  152. }  
  153. public string GetFirstKeyCondition()  
  154. {  
  155.     string condition = " other==null";  
  156.     for (int i = 0; i < SourceTable.Columns.Count; i++)  
  157.     {  
  158.         var tempColumn = SourceTable.Columns[i];  
  159.         if(tempColumn.IsPrimaryKeyMember)  
  160.         {  
  161.             if(((bool)tempColumn.ExtendedProperties["CS_IsIdentity"].Value))  
  162.             {  
  163.                 condition += " || this." + SourceTable.Columns[i].Name + " == 0";  
  164.                 condition += " || other."+ SourceTable.Columns[i].Name + " == 0";  
  165.             }  
  166.             else 
  167.             {  
  168.                 condition += " || string.IsNullOrEmpty(this." + SourceTable.Columns[i].Name + ")";  
  169.                 condition += " || string.IsNullOrEmpty(other."+ SourceTable.Columns[i].Name + ")";  
  170.             }  
  171.         }  
  172.     }  
  173.     return condition;  
  174. }  
  175. public string GetTwoKeyCondition()  
  176. {  
  177.     string condition = " ";  
  178.     for (int i = 0; i < SourceTable.Columns.Count; i++)  
  179.     {  
  180.         if(SourceTable.Columns[i].IsPrimaryKeyMember)  
  181.         {  
  182.              condition += " || this."+SourceTable.Columns[i].Name +" !=other."+SourceTable.Columns[i].Name;  
  183.         }  
  184.     }  
  185.     return condition.Substring(4,condition.Length-4).ToString();  
  186. }  
  187. public string GetHashCodeStr()  
  188. {  
  189.     string hashCode = " ";  
  190.     for (int i = 0; i < SourceTable.Columns.Count; i++)  
  191.     {  
  192.         if(SourceTable.Columns[i].IsPrimaryKeyMember)  
  193.         {  
  194.              hashCode += "+\"|\" +this."+SourceTable.Columns[i].Name +".ToLower()";  
  195.         }  
  196.     }  
  197.     return hashCode.Substring(7,hashCode.Length-7).ToString();  
  198. }  
  199. public string GetDefaultValue(ColumnSchema column)  
  200. {  
  201.     string DefaultValue = "";  
  202.     switch(column.DataType)  
  203.     {  
  204.         case DbType.Int16:  
  205.         case DbType.Int32:  
  206.         case DbType.Int64:  
  207.             DefaultValue = "0";      
  208.             break;  
  209.         case DbType.Decimal:  
  210.             DefaultValue = "0.000000M";  
  211.             break;  
  212.         case DbType.AnsiString:  
  213.         case DbType.String:  
  214.         case DbType.StringFixedLength:  
  215.             DefaultValue = "\"\"";  
  216.             break;  
  217.         case DbType.Date:  
  218.         case DbType.DateTime:  
  219.         case DbType.DateTime2:  
  220.             DefaultValue = "DateTime.Parse(\"1999-01-01 00:00:00\")";  
  221.             break;  
  222.         case DbType.Binary:  
  223.             DefaultValue = "new byte[] { }";  
  224.             break;  
  225.         case DbType.Boolean:  
  226.             DefaultValue = "False";  
  227.             break;  
  228.         case DbType.Byte:  
  229.             DefaultValue = "1";  
  230.             break;  
  231.         default:  
  232.             break;  
  233.     }  
  234.     return DefaultValue;  
  235. }  
  236. </script> 

该模板只适用于但主键的环境,且主键必须为字符串类型,或者为自增长列。初步满足公司当前的需要。

你可能感兴趣的:(模版,codesmith,PetaPOCO,T4)