如果你能看到这篇文章,说明你手中已经有CodeSmith,如果没有,那去http://download.csdn.net/source/1452382这里下载吧。
今天用了小一天的时间,了解了一下CodeSmith,确实是很强大,废话就不说了,批量生成文件的方法主要是调用子模板来生成文件。
先看一下子模板:
<%--
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>
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>