三、約定
這裡寫的東東都是從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
<%
2
foreach (TableSchema table in SourceDatabase.Tables)
3
{
4
OutputSubTemplate(table);
5
}
6
%>
7
<script runat="template">
8
private CodeTemplate _mySubTemplate;
9
10
[Browsable(false)]
11
public 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
35
public 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
<%
13
foreach (TableSchema table in Sour
ceDatabase.Tables)
14
{
15
OutputSubTemplate(table);
16
}
17
%>
18
19
<script runat="template">
20
private CodeTemplate _mySubTemplate;
21
22
23
24
25
[Browsable(false)]
26
public 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
52
public 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文件源代碼