如果你能看到这篇文章,说明你手中已经有CodeSmith,如果没有,那去http://download.csdn.net/source/1452382这里下载吧。
今天用了小一天的时间,了解了一下CodeSmith,确实是很强大,废话就不说了,批量生成文件的方法主要是调用子模板来生成文件。
先看一下子模板:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
Name:
Author:
Description:
--%>
<% @ CodeTemplate Language = " C# " TargetLanguage = " C# " Description = " Template description here. " ResponseEncoding = " UTF-8 " %>
<% @ Property Name = " SourceTable " Type = " SchemaExplorer.TableSchema " Default = "" Optional = " False " Category = " Context " Description = "" OnChanged = "" Editor = "" EditorBase = "" Serializer = "" %>
<% @ Assembly Name = " SchemaExplorer " %>
<% @ Import Namespace = " SchemaExplorer " %>
///
// File: .cs
// Description: Enter summary here after generation.
// ---------------------
// Copyright ? Our Client
// ---------------------
// History
// <%= DateTime.Now.ToShortDateString() %> Original Version
///
using System;
namespace App.Entity
{
/// <summary>
/// <%=SourceTable.Columns[0].Description%>
/// </summary>
public class Entity <%= SourceTable.Name %> : BaseEntity
{
<% foreach (ColumnSchema column in SourceTable.Columns) %>
<% { %>
/// <summary>
/// <%=column.Description%>
/// </sumary>
private <%= GetCSDataType(column) %> m_ <%= column.Name %> ;
<% } %>
<% foreach (ColumnSchema column in SourceTable.Columns) %>
<% { %>
public <%= GetCSDataType(column) %> <%= column.Name %>
{
get { return m_ <%= column.Name %> ;}
set { m_ <%= column.Name %>= value;}
}
<% } %>
}
}
< script runat = " template " >
// My methods here.
public string GetCSDataType(ColumnSchema column)
{
switch (column.DataType)
{
case DbType.AnsiString: return " string " ;
case DbType.AnsiStringFixedLength: return " string " ;
case DbType.Binary: return " byte[] " ;
case DbType.Boolean: return " bool " ;
case DbType.Byte: return " byte " ;
case DbType.Currency: return " decimal " ;
case DbType.Date: return " DateTime " ;
case DbType.DateTime: return " DateTime " ;
case DbType.Decimal: return " decimal " ;
case DbType.Double: return " double " ;
case DbType.Guid: return " Guid " ;
case DbType.Int16: return " short " ;
case DbType.Int32: return " int " ;
case DbType.Int64: return " long " ;
case DbType.Object: return " object " ;
case DbType.SByte: return " sbyte " ;
case DbType.Single: return " float " ;
case DbType.String: return " string " ;
case DbType.StringFixedLength: return " string " ;
case DbType.Time: return " TimeSpan " ;
case DbType.UInt16: return " ushort " ;
case DbType.UInt32: return " uint " ;
case DbType.UInt64: return " ulong " ;
case DbType.VarNumeric: return " decimal " ;
default :
{
return " __UNKNOWN__ " + column.NativeType;
}
}
}
</ script >
在这里,首先定义欲生成的表信息"SourceTable",必须添加"SchemaExplorer"的引用。其它的就是如何按表结构输出到CS文件了(这里以实体类为例)。
再看一下主模板:
代码
在主模板中,定义了"Tables"表示欲生成的表集合,"MakeDir"定义了生成文件保存的目录;
<%@ Register Name="MyEntity" Template="C:\Documents and Settings\taurus\My Documents\CodeSmith\Templates\MyDemo\Entity.cst" MergeProperties="False" ExcludeProperties="" %>
这个就是注册子模板,必须添加<%@ Assembly Name="CodeSmith.BaseTemplates" %>
<%@ Import Namespace="CodeSmith.BaseTemplates" %>,以增加对BaseTemplates的引用。
然后,在"OutputSubTemplate"函数中调用子模板输出文件
CodeTemplate temp = new MyEntity();
temp.SetProperty("SourceTable",table);
temp.RenderToFile(MakeDir+"\\"+table+".cs",true);
这里,RenderToFile的第一个参数是输出文件名,第二个参数是是否覆盖原文件。
这样,通过在主文件中调用多个子模板文件,完成针对实体类、数据处理类以及前端文件的批量生成。
参考:http://www.cnblogs.com/lovko/archive/2009/06/19/1506840.html
http://bear-study-hard.cnblogs.com/archive/2005/12/19/300320.html