代碼生成器 CodeSmith 的使用(二)

在第一篇中,簡單的介紹了 CodeSmith 的使用方法,這次做一個生成簡單的數據庫字段屬性的模板。以下只粘貼主要的代碼片段。

 

<%-- 
Name:  Copyright © Sun 2013-2014 All rights reserved  
Contact me:  [email protected]
Author:  SpringFileld
Description: 遍歷數據庫中的表,並映射成類的屬性 Camel規則的寫法
DateTime: 2014-07-31
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="C#" Debug="False" Description="Create a list of properties from database table." %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="Table that the object is based on." %>
<%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>

<% foreach (ColumnSchema column in this.SourceTable.Columns) {  %>
private <%= CSharpAlias[column.SystemType.FullName] %> _<%=StringUtil.ToCamelCase(column.Name) %>;

public <%= CSharpAlias[column.SystemType.FullName] %> <%= StringUtil.ToCamelCase( column.Name) %>
{
	get { return _<%=StringUtil.ToCamelCase(column.Name) %>; }
	set { _<%=StringUtil.ToCamelCase(column.Name) %> = value; }
}

<% } %>


生成的效果如下:(Camel規則的寫法)

private string _sheetNo;

public string sheetNo
{
	get { return _sheetNo; }
	set { _sheetNo = value; }
}

private decimal _sheetAmt;

public decimal sheetAmt
{
	get { return _sheetAmt; }
	set { _sheetAmt = value; }
}

private System.DateTime _operDate;

public System.DateTime operDate
{
	get { return _operDate; }
	set { _operDate = value; }
}

private string _settleFlag;

public string settleFlag
{
	get { return _settleFlag; }
	set { _settleFlag = value; }
}

private string _transNo;

public string transNo
{
	get { return _transNo; }
	set { _transNo = value; }
}

Pascal 規則模板代碼:

<%-- 
Name:  Copyright © Sun 2013-2014 All rights reserved  
Contact me:  [email protected]
Author:  SpringFileld
Description: 遍歷數據庫中的表,並映射成類的屬性 Pascall 規則
DateTime: 2014-07-31
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="C#" Debug="False" Description="Create a list of properties from database table." %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="Table that the object is based on." %>
<%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>

<% foreach (ColumnSchema column in this.SourceTable.Columns) {  %>
private <%= CSharpAlias[column.SystemType.FullName] %> _<%=StringUtil.ToPascalCase(column.Name) %>;

public <%= CSharpAlias[column.SystemType.FullName] %> <%= StringUtil.ToPascalCase( column.Name) %>
{
	get { return _<%=StringUtil.ToPascalCase(column.Name) %>; }
	set { _<%=StringUtil.ToPascalCase(column.Name) %> = value; }
}

<% } %>


 

Pascal 規則生成結果:

private string _SheetNo;

public string SheetNo
{
	get { return _SheetNo; }
	set { _SheetNo = value; }
}

private decimal _SheetAmt;

public decimal SheetAmt
{
	get { return _SheetAmt; }
	set { _SheetAmt = value; }
}

private System.DateTime _OperDate;

public System.DateTime OperDate
{
	get { return _OperDate; }
	set { _OperDate = value; }
}

private string _SettleFlag;

public string SettleFlag
{
	get { return _SettleFlag; }
	set { _SettleFlag = value; }
}

private string _TransNo;

public string TransNo
{
	get { return _TransNo; }
	set { _TransNo = value; }
}

 

原生的屬性寫法(生成的屬性字段的大小寫與數據庫中的字段的大小寫完全相同)

<%-- 
Name:  Copyright © Sun 2013-2014 All rights reserved  
Contact me:  [email protected]
Author:  SpringFileld 
Description: 遍歷數據庫中的表,並映射成類的屬性 原生的寫法
DateTime: 2014-07-31
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="C#" Debug="False" Description="Create a list of properties from database table." %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="Table that the object is based on." %>
<%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>

<% foreach (ColumnSchema column in this.SourceTable.Columns) {  %>
private <%= CSharpAlias[column.SystemType.FullName] %> _<%= column.Name %>;

public <%= CSharpAlias[column.SystemType.FullName] %> <%= column.Name %>
{
	get { return _<%= column.Name %>; }
	set { _<%= column.Name %> = value; }
}

<% } %>


原生的屬性寫法生成的效果:

private string _sheet_no;

public string sheet_no
{
	get { return _sheet_no; }
	set { _sheet_no = value; }
}

private decimal _sheet_amt;

public decimal sheet_amt
{
	get { return _sheet_amt; }
	set { _sheet_amt = value; }
}

private System.DateTime _oper_date;

public System.DateTime oper_date
{
	get { return _oper_date; }
	set { _oper_date = value; }
}

private string _settle_flag;

public string settle_flag
{
	get { return _settle_flag; }
	set { _settle_flag = value; }
}

private string _trans_no;

public string trans_no
{
	get { return _trans_no; }
	set { _trans_no = value; }
}

 

總結:


 如果要改成 Pascal 規則的寫法, 只要將StringUtil.ToCamelCase(column.Name) 改成 StringUtil.ToPascalCase(column.Name)即可, 若不想用這兩種規則,生成原生的字段屬性,可以寫成column.Name 去掉 StringUtil.ToCamelCase() 和 StringUtil.ToPascalCase() 方法

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章