代码生成器 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() 方法

 

你可能感兴趣的:(code)