三、約定
這裡寫的東東都是從CodeSmith自帶的幫助文檔中FAQ裡學到的東東
1.如何在模板中添加注釋
CodeSmith:
<%-- Comments --%>
VB.Net:
<%-- ''Comments --%>
C#:
<%-- // Comments --%>
<%-- /* Comments */ --%>
2.創建一個可以下拉選擇的屬性
首先定義一個枚舉類型的變量,然後將屬性的類型設置為枚舉型
CS_Identity_Example.cst文件源代碼
1 <%@ Property Name="CollectionType" Type="CollectionTypeEnum" Category="Collection" Description="Type of collection" %>
2
3 <script runat="tempate">
4 public enum CollectionTypeEnum
5 {
6 Vector,
7 HashTable,
8 SortedList
9 }
10 </script>
3.解決ASP.Net中標簽<%重復問題
先將ASP.Net中使用的這個重復標簽寫成<%%,避免在生成代碼時由於是標簽重復引起的編譯錯誤或生成錯誤。
4.如何聲明一個常量
5.如何對模板進行調試
如果要調試一個模板,首先要在代碼模板裡進行聲明,然後在你想要進行調試的地方用Debugger.Break()語句設置斷點即可。
6.如何將屬性設置成選擇一個文件夾的路徑
7.怎樣調用子模板
1
<%
2foreach (TableSchema table in SourceDatabase.Tables)
3{
4 OutputSubTemplate(table);
5}
6%>
7<script runat="template">
8private CodeTemplate _mySubTemplate;
9
10[Browsable(false)]
11public CodeTemplate MySubTemplate
12
{
13 get
14 {
15 if (_mySubTemplate == null)
16 {
17 CodeTemplateCompiler compiler = new CodeTemplateCompiler(this.CodeTemplateInfo.DirectoryName + "MySubTemplate.cst");
18 compiler.Compile();
19 if (compiler.Errors.Count == 0)
20 {
21 _mySubTemplate = compiler.CreateInstance();
22 }
23 else
24 {
25 for (int i = 0; i < compiler.Errors.Count; i++)
26
{
27 Response.WriteLine(compiler.Errors[ i].ToString());
28 }
29 }
30 }
31 return _mySubTemplate;
32 }
33}
34
35public void OutputSubTemplate(TableSchema table)
36{
37 MySubTemplate.SetProperty("SourceTable", table);
38 MySubTemplate.SetProperty("IncludeDrop", false);
39 MySubTemplate.SetProperty("InsertPrefix", "Insert");
40 MySubTemplate.Render(Response);
41}
42</script>
FAQ中給出的例子為生成一個數據庫中所有表的更新Update存儲過程
SubTemplatesExample.cst文件源代碼
1
<%@ CodeTemplate Language="C#" TargetLanguage="T-SQL"
2 Description="Generates a update stored procedure." %>
3
4<%@ Property Name="SourceDatabase" Type="SchemaExplorer.DatabaseSchema"
5 Category="Context"
6 Description="Database" %>
7
8<%@ Assembly Name="SchemaExplorer" %>
9
10<%@ Import Namespace="SchemaExplorer" %>
11
12<%
13foreach (TableSchema table in Sour
ceDatabase.Tables)
14{
15 OutputSubTemplate(table);
16}
17%>
18
19<script runat="template">
20private CodeTemplate _mySubTemplate;
21
22
23
24
25[Browsable(false)]
26public CodeTemplate MySubTemplate
27{
28 get
29 {
30 if (_mySubTemplate == null)
31 {
32 CodeTemplateCompiler compiler = new CodeTemplateCompiler(this.CodeTemplateInfo.DirectoryName + "MySubTemplate.cst");
33 compiler.Compile();
34
35 if (compiler.Errors.Count == 0)
36 {
37 _mySubTemplate = compiler.CreateInstance();
38 }
39 else
40 {
41 for (int i = 0; i < compiler.Errors.Count; i++)
42 {
43 Response.WriteLine(compiler.Errors[ i].ToString());
44 }
45 }
46 }
47
48 return _mySubTemplate;
49 }
50}
51
52public void OutputSubTemplate(TableSchema table)
53
{
54 MySubTemplate.SetProperty("SourceTable", table);
55 MySubTemplate.SetProperty("IncludeDrop", false);
56 MySubTemplate.SetProperty("InsertPrefix", "Insert");
57
58 MySubTemplate.Render(Response);
59}
60</script>
MySubTemplate.cst文件源代碼