CodeSmith自己动手写模板

CodeSmith学习笔记------

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

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

①外部变量:

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

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

CodeSmith自己动手写模板

还有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>
 
 


 

 

你可能感兴趣的:(code)