zoukankan      html  css  js  c++  java
  • CodeSmith自己动手写模板

    CodeSmith学习笔记------

    1.新建一个Code Smith Generator Template(C sharp)

    2.一些常见标签的解释:

    ①外部变量:

    <%@ Property Name="SampleStringProperty" Default="SomeValue" Type="System.String" %>

    表示定义一个string类型的外部变量,在需要在生成的时候才输入,此属性有默认值,也可以由用户在右下角的属性栏里修改属性的值。

    还有Optional:是否允许为空(即不输入),Category:是说你声明的这个属性的类别(CodeSmith会按分类分开展示让你输入)。

    ②与数据库交互

    CodeSmith与数据库的联系,在CodeSmith中自带一个程序集SchemaExplorer.dll,这个程序集中的类主要用于获取数据库中各种对象的结构。

    1 <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Optional="False" Description="源表名" %>
    2 
    3 <%@ Property Name="SourceDB" Type="SchemaExplorer.DatabaseSchema" Optional="False" %>
    4 
    5 <%@ Assembly Name="SchemaExplorer" %>
    6 
    7 <%@ Import Namespace="SchemaExplorer" %>


    
    
    Assembly:引用程序集,Import:相当于using命名空间。
    Type="SchemaExplorer.DatabaseSchema"此类型会在属性栏生成一个数据库的选择框,Type="SchemaExplorer.TableSchema"即表的选择框。
    ③自定义方法:
    1 <script runat="template">
    2 // My methods here.
    3 public string SampleMethod()
    4 {
    5   return "Method output.";
    6 }
    7 </script>
    <script runat="template"></script>标签内写的是自定义函数(C#代码)
    ④模板部分书写:
    C#代码要用<%%>包括,值类型要使用<%=%>
    例如:生成一个Model层的模板
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Text;
     4 
     5 Namespace Model
     6 {
     7     Class <%=TargetTable.Name%>
     8     {
     9         <%  for (int i=0;i<TargetTable.Columns.Count;i++)
    10         {
    11             SchemaExplorer.ColumnSchema col = TargetTable.Columns[i];%>
    12             public <%=col.SystemType%> <%=col.Name%>{get;set;}
    13       <%}%>
    14     }
    15 }

    ⑤一份完整的DAL的模板示例:

      1 <%@ CodeTemplate Language="C#" TargetLanguage="C#" 
      2     Src="ToolsCodeTemplate.cs" Inherits="ToolsCodeTemplate"%>
      3 <%@ Property Name="TargetTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="TargetTable that the object is based on." %>
      4 <%@ Property Name="ModelsNamespace" Default="MyOffice.Models" Type="System.String" Category="Context" Description="TargetTable that the object is based on." %>
      5 <%@ Property Name="DALNamespace" Default="MyOffice.DAL" Type="System.String" Category="Context" Description="TargetTable that the object is based on." %>
      6 <%@ Property Name="DALClassNameSurfix" Default="Service" Type="System.String" Category="Context" Description="TargetTable that the object is based on." %>
      7 <%@ Assembly Name="SchemaExplorer" %>
      8 <%@ Assembly Name="System.Data" %>
      9 <%@ Import Namespace="SchemaExplorer" %>
     10 <%@ Import Namespace="System.Data" %>
     11 <%@ Import Namespace="System.Text.RegularExpressions" %>
     12 <% PrintHeader(); %>
     13 using System;
     14 using System.Collections.Generic;
     15 using System.Text;
     16 using System.Data;
     17 using System.Data.SqlClient;
     18 using <%= ModelsNamespace %>;
     19 
     20 namespace <%= DALNamespace %>
     21 {
     22     public partial class <%= GetDALClassName() %>
     23     {
     24         <%-- public static Book AddBook(Book book) --%>
     25         public <%= GetModelClassName() %> Add
     26             (<%= GetModelClassName() %> <%= GetModelParamName() %>)
     27         {
     28             <%if(IsIdentityPK())
     29             {%>
     30                 string sql ="<%= GetAutoIncInsertSQLLine()%>";
     31                 SqlParameter[] para = new SqlParameter[]
     32                     {
     33                         <%
     34                         for(int i=0; i<TargetTable.NonPrimaryKeyColumns.Count; i++)
     35                         {
     36                             ColumnSchema column = TargetTable.NonPrimaryKeyColumns[i];
     37                             
     38                         %>
     39                         new SqlParameter("@<%= column.Name %>", ToDBValue(<%= GetModelParamName() %>.<%= column.Name %>)),
     40                         <%
     41                         }
     42                         %>
     43                     };
     44                     
     45                 <%= GetPKPropertyType() %> newId = (<%= GetPKPropertyType() %>)SqlHelper.ExecuteScalar(sql, para);
     46                 return GetBy<%= GetPKPropertyName() %>(newId);
     47             <%}else
     48             {%>
     49                 string sql ="<%= GetCommonInsertSQLLine()%>";
     50                 SqlParameter[] para = new SqlParameter[]
     51                     {
     52                         <%
     53                         for(int i=0; i<TargetTable.Columns.Count; i++)
     54                         {
     55                             ColumnSchema column = TargetTable.Columns[i];                            
     56                         %>
     57                         new SqlParameter("@<%= column.Name %>", ToDBValue(<%= GetModelParamName() %>.<%= column.Name %>)),
     58                         <%
     59                         }
     60                         %>
     61                     };
     62                 SqlHelper.ExecuteNonQuery(sql, para);
     63                 return <%= GetModelParamName() %>;                
     64             <%}%>
     65         }
     66 
     67         <%-- public static bool DeleteBookById(int id) --%>
     68         public int DeleteBy<%= GetPKPropertyName() %>(<%= GetPKPropertyType() %> <%= GetPKParamName() %>)
     69         {
     70             string sql = "DELETE <%= TargetTable.Name %> WHERE <%= GetPKPropertyName() %> = @<%= GetPKPropertyName() %>";
     71 
     72            SqlParameter[] para = new SqlParameter[]
     73             {
     74                 new SqlParameter("@<%= GetPKName() %>", <%= GetPKParamName() %>)
     75             };
     76         
     77             return SqlHelper.ExecuteNonQuery(sql, para);
     78         }
     79         
     80                 
     81         <%-- public static bool ModifyBook(Book book) --%>
     82         public int Update(<%= GetModelClassName() %> <%= GetModelParamName() %>)
     83         {
     84             string sql =
     85                 "UPDATE <%= TargetTable.Name %> " +
     86                 "SET " +
     87             " <%= TargetTable.NonPrimaryKeyColumns[0].Name %> = @<%= TargetTable.NonPrimaryKeyColumns[0].Name %>" 
     88             <%
     89             for(int i=1; i<TargetTable.NonPrimaryKeyColumns.Count; i++)
     90             {
     91                 ColumnSchema column = TargetTable.NonPrimaryKeyColumns[i];                
     92             %>
     93                 +", <%= column.Name %> = @<%= column.Name %>" 
     94             <%
     95             }
     96             %>
     97                
     98             +" WHERE <%= GetPKName() %> = @<%= GetPKName() %>";
     99 
    100 
    101             SqlParameter[] para = new SqlParameter[]
    102             {
    103                 new SqlParameter("@<%= GetPKName() %>", <%= GetModelParamName() %>.<%= GetPKName() %>)
    104                 <%
    105                 for(int i=0; i<TargetTable.NonPrimaryKeyColumns.Count; i++)
    106                 {
    107                     ColumnSchema column = TargetTable.NonPrimaryKeyColumns[i];
    108                 %>
    109                     ,new SqlParameter("@<%= column.Name %>", ToDBValue(<%= GetModelParamName() %>.<%= column.Name %>))
    110                 <%
    111                 }
    112                 %>
    113             };
    114 
    115             return SqlHelper.ExecuteNonQuery(sql, para);
    116         }        
    117         
    118         <%-- public static Book GetBookById(int id) --%>
    119         public <%= GetModelClassName() %> GetBy<%= GetPKPropertyName() %>(<%= GetPKPropertyType() %> <%= GetPKParamName() %>)
    120         {
    121             string sql = "SELECT * FROM <%= TargetTable.Name %> WHERE <%= GetPKPropertyName() %> = @<%= GetPKPropertyName() %>";
    122             using(SqlDataReader reader = SqlHelper.ExecuteDataReader(sql, new SqlParameter("@<%= GetPKPropertyName() %>", <%= GetPKParamName() %>)))
    123             {
    124                 if (reader.Read())
    125                 {
    126                     return ToModel(reader);
    127                 }
    128                 else
    129                 {
    130                     return null;
    131                 }
    132                }
    133         }
    134         
    135         public <%= GetModelClassName() %> ToModel(SqlDataReader reader)
    136         {
    137             <%= GetModelClassName() %> <%= GetModelParamName() %> = new <%= GetModelClassName() %>();
    138 
    139             <% foreach(ColumnSchema column in TargetTable.Columns) %>
    140             <% { %>
    141             <%= GetModelParamName() %>.<%= GetPropertyName(column) %> = (<%=GetPropertyType(column)%>)ToModelValue(reader,"<%=column.Name%>");
    142             <% } %>
    143             return <%= GetModelParamName() %>;
    144         }
    145         
    146         public int GetTotalCount()
    147         {
    148             string sql = "SELECT count(*) FROM <%= TargetTable.Name %>";
    149             return (int)SqlHelper.ExecuteScalar(sql);
    150         }
    151         
    152         public IEnumerable<<%= GetModelClassName() %>> GetPagedData(int minrownum,int maxrownum)
    153         {
    154             string sql = "SELECT * from(SELECT *,row_number() over(order by <%=this.GetPKName()%>) rownum FROM <%= TargetTable.Name %>) t where rownum>=@minrownum and rownum<=@maxrownum";
    155             using(SqlDataReader reader = SqlHelper.ExecuteDataReader(sql,
    156                 new SqlParameter("@minrownum",minrownum),
    157                 new SqlParameter("@maxrownum",maxrownum)))
    158             {
    159                 return ToModels(reader);                    
    160             }
    161         }
    162         
    163         public IEnumerable<<%= GetModelClassName() %>> GetAll()
    164         {
    165             string sql = "SELECT * FROM <%= TargetTable.Name %>";
    166             using(SqlDataReader reader = SqlHelper.ExecuteDataReader(sql))
    167             {
    168                 return ToModels(reader);            
    169             }
    170         }
    171         
    172         protected IEnumerable<<%= GetModelClassName() %>> ToModels(SqlDataReader reader)
    173         {
    174             var list = new List<<%= GetModelClassName() %>>();
    175             while(reader.Read())
    176             {
    177                 list.Add(ToModel(reader));
    178             }    
    179             return list;
    180         }        
    181         
    182         protected object ToDBValue(object value)
    183         {
    184             if(value==null)
    185             {
    186                 return DBNull.Value;
    187             }
    188             else
    189             {
    190                 return value;
    191             }
    192         }
    193         
    194         protected object ToModelValue(SqlDataReader reader,string columnName)
    195         {
    196             if(reader.IsDBNull(reader.GetOrdinal(columnName)))
    197             {
    198                 return null;
    199             }
    200             else
    201             {
    202                 return reader[columnName];
    203             }
    204         }
    205     }
    206 }
    207 <script runat="template">
    208 public bool IsIdentityPK()
    209 {
    210     foreach(ColumnSchema column in TargetTable.Columns)
    211     {
    212         if((bool)column.ExtendedProperties["CS_IsIdentity"].Value) 
    213         {
    214             return true;
    215         }
    216     }
    217     return false;
    218 }
    219 
    220 ///////////////////////////////////////////////////////////////
    221 // CLASS NAMES by Shen Bo
    222 ///////////////////////////////////////////////////////////////
    223 // UserService
    224 public string GetDALClassName()
    225 {
    226     return     GetModelClassName() + DALClassNameSurfix;
    227 }
    228 // User
    229 public string GetModelClassName()
    230 {
    231     return     GetModelClassName(TargetTable);
    232 }
    233 // user
    234 public string GetModelMemberVarName()
    235 {
    236     return GetModelParamName();
    237 }
    238 // user
    239 public string GetModelParamName()
    240 {
    241     return MakeCamel(GetModelClassName());
    242 }
    243 
    244 
    245 ///////////////////////////////////////////////////////////////
    246 // INSERT SQL LINES by Shen Bo
    247 ///////////////////////////////////////////////////////////////
    248 public string GetAutoIncInsertSQLLine()
    249 {
    250     string result;
    251     result = "INSERT INTO " + TargetTable.Name + " (";
    252     foreach(ColumnSchema column in TargetTable.NonPrimaryKeyColumns)
    253     {
    254         result += column.Name + ", ";
    255     }
    256     result = result.Substring(0, result.Length-2);
    257     result += ") ";
    258     result+=" output inserted."+GetPKName();
    259     result += " VALUES (";
    260     foreach(ColumnSchema column in TargetTable.NonPrimaryKeyColumns)
    261     {
    262         result += "@" + column.Name + ", ";
    263     }
    264     result = result.Substring(0, result.Length-2);
    265     result += ")";
    266     return result;
    267 }
    268 
    269 public string GetCommonInsertSQLLine()
    270 {
    271     string result;
    272     result = "INSERT INTO " + TargetTable.Name + " (";
    273     foreach(ColumnSchema column in TargetTable.Columns)
    274     {
    275         result += column.Name + ", ";
    276     }
    277     result = result.Substring(0, result.Length-2);
    278     result += ") ";
    279     result += " VALUES (";
    280     foreach(ColumnSchema column in TargetTable.Columns)
    281     {
    282         result += "@" + column.Name + ", ";
    283     }
    284     result = result.Substring(0, result.Length-2);
    285     result += ")";
    286     return result;
    287 }
    288 
    289 ///////////////////////////////////////////////////////////////
    290 // PRIMARY KEY TYPE by Shen Bo
    291 ///////////////////////////////////////////////////////////////
    292 // int
    293 public string GetPKPropertyType()
    294 {
    295     return     GetPKType(TargetTable);
    296 }
    297 
    298 ///////////////////////////////////////////////////////////////
    299 // PRIMARY KEY NAME by Shen Bo
    300 ///////////////////////////////////////////////////////////////
    301 // Id
    302 public string GetPKPropertyName()
    303 {
    304     return MakePascal(GetPKName());
    305 }
    306 // id
    307 public string GetPKParamName()
    308 {
    309     return GetPKMemberVarName();    
    310 }
    311 // id
    312 public string GetPKMemberVarName()
    313 {
    314     return MakeCamel(GetPKName());    
    315 }
    316 // Id
    317 public string GetPKName()
    318 {
    319     return GetPKName(TargetTable);
    320 }
    321 
    322 public override string GetFileName()
    323 {
    324     return this.GetDALClassName() + ".cs";
    325 }
    326 
    327 </script>
     
     


     
  • 相关阅读:
    UWP中实现大爆炸效果(二)
    UWP中实现大爆炸效果(一)
    c# 【电影搜索引擎】采集电影站源码
    安利一个聚合搜索导航站,及怎么样设置成默认的搜索引擎
    女朋友经常问影视剧, 答不上来怎么办?
    宝塔linux面板, 服务器日志分析与流量统计这款插件的mysql版优化。
    苹果cms自动采集,重复执行遇到“上次执行时间: --跳过”的解决办法
    苹果cms, 后台设置保存不了的解决办法
    解决 C:WINDOWSsystem32inetsrv ewrite.dll 未能加载。返回的数据为错误.
    img error 图片加载失败的最佳方案
  • 原文地址:https://www.cnblogs.com/sunniest/p/4128183.html
Copyright © 2011-2022 走看看