CodeSmith Module层 模板



VS 2005 模式:

<%@ CodeTemplate Language="C#" TargetLanguage="C#" Description="Template description here." %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" %>
<%@ Import Namespace="System.Text.RegularExpressions" %>
using System;
using System.Collections.Generic;
using System.Text;

namespace MODEL
{
    [Serializable]
    public class <%=GetClassName(SourceTable)%>
    {
        <% foreach (ColumnSchema column in SourceTable.Columns) {%>
        <% if (column.IsForeignKeyMember) {%>
        private <%=GetPascalName(GetForeignKeyColumnType(column))%> <%=GetCamelName(GetForeignKeyColumnName(column))%> = new <%=GetPascalName(GetForeignKeyColumnType(column))%>();
        <% }else{%>
        private <%=GetCSharpVariableType(column)%> <%=GetCamelName(column)%>;
        <% }%>
        <% }%>    
        
        <% foreach (ColumnSchema column in SourceTable.Columns) {%>
        <% if (column.IsForeignKeyMember){ %>
        /// <summary>
        /// <%=column.Description %>
        /// </summary>
        public <%=GetPascalName(GetForeignKeyColumnType(column)) %> <%=GetPascalName(GetForeignKeyColumnName(column))%>
        {
            get { return <%=GetCamelName(GetForeignKeyColumnName(column)) %>; }
            set { <%=GetCamelName(GetForeignKeyColumnName(column)) %> = value; }
        }
        <% } else {%>
        /// <summary>
        /// <%=column.Description %>
        /// </summary>
        public <%=GetCSharpVariableType(column) %> <%=GetPascalName(column) %>
        {
            get { return <%= GetCamelName(column) %>; }
            set { <%= GetCamelName(column) %> = value; }
        }
        <% }%>
        <% }%>
    }
}
<script runat="template">

public string MakeSingle(string name)
{
    return name;
}
public string GetCamelName(ColumnSchema column)
{
    return column.Name.Substring(0, 1).ToLower() + column.Name.Substring(1);
}
public string GetCamelName(string value)
{
    return value.Substring(0, 1).ToLower() + value.Substring(1);
}
public string GetPascalName(ColumnSchema column)
{
    return column.Name.Substring(0, 1).ToUpper() + column.Name.Substring(1);
}
public string GetPascalName(string value)
{
    return value.Substring(0, 1).ToUpper() + value.Substring(1);
}
public string GetClassName(TableSchema table)
{
    return GetPascalName(MakeSingle(table.Name));
}    
public string GetForeignKeyColumnType(ColumnSchema column)
{        
    return column.Table.ForeignKeys[0].PrimaryKeyTable.Name;
}
public string GetForeignKeyColumnName(ColumnSchema column)
{    
    if(column.Name.Substring(column.Name.Length-2).ToLower() == "id")
    {
        return column.Name.Substring(0,column.Name.Length-2);
    }
    else
    {
        return column.Name;
    }
}

public string GetStructureParameter()
{//int id,string name
        string temp = "";
        foreach(ColumnSchema column in SourceTable.NonPrimaryKeyColumns) 
        {
                if(column.IsForeignKeyMember) 
                {
                    temp += GetPascalName(GetForeignKeyColumnType(column)) + " " +GetCamelName(GetForeignKeyColumnName(column)) + ",";
                }
                else
                {
                    temp += GetCSharpVariableType(column) + " " + GetCamelName(column) + ",";
                }
        }
        return temp.Substring(0,temp.Length-1);
}
public string GetPrimaryKeyType(TableSchema table)
{
    if (table.PrimaryKey != null)
    {
        if (table.PrimaryKey.MemberColumns.Count == 1)
        {
            return GetCSharpVariableType(table.PrimaryKey.MemberColumns[0]);
        }
        else
        {
            throw new ApplicationException("This template will not work on primary keys with more than one member column.");
        }
    }
    else
    {
        throw new ApplicationException("This template will only work on tables with a primary key.");
    }
}
public string GetCSharpVariableType(ColumnSchema column)
{
    if (column.Name.EndsWith("TypeCode")) return column.Name;
    
    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;
        }
    }
}    
public override string GetFileName()
{
    return     GetClassName(SourceTable) + ".cs";
}
</script>

VS 2008 模式:

<%@ CodeTemplate Language="C#" TargetLanguage="C#" ResponseEncoding="UTF-8" Description="实体类" %>
<%@ Property Name="NameSpace" Type="System.String" Default="Model" Category="Property" Description="命名空间" %>
<%@ Property Name="Author" Type="System.String" Default="Wilson" Category="Property" Description="作者名" %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Optional="True" Category="db" Description="表映射文件" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Assembly Name="System.Data" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Import Namespace="System.Data" %>

<script runat="template">
    /// <summary>
    ///把数据库类型转化为C#类型
    /// </summary>
    public string DataType2CSharpType(System.Data.DbType dbType)
    {
        switch (dbType)
        {
            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.DateTime2:
                return "DateTime";
            case DbType.DateTimeOffset:
                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 "DateTime";                
            case DbType.UInt16:
                return "ushort";
            case DbType.UInt32:
                return "uint";
            case DbType.UInt64:
                return "ulong";
            case DbType.VarNumeric:
                return "decimal";
            case DbType.Xml:
                return "string";
            default:
                return "object";
        }
    }
</script>
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;

namespace <%=NameSpace%>
{
    /// <summary>
    /// 功能: 实体类 (<%=SourceTable.Description%>)
    /// 创建人:<%=Author%>     
    /// 创建日期:<%=DateTime.Now.ToShortDateString() %>    
    /// </summary>
    [Serializable]
    public class <%=SourceTable.Name%>
    {
        public <%=SourceTable.Name%>()
        {
			
        }

       #region  <%=SourceTable.Name%>实体

       <%for(int i = 0;i < SourceTable.Columns.Count;i++)%>
	   <%{%>
	
	   /// <summary>
	   /// <%=SourceTable.Columns[i].Description%>
	   /// </summary>
	   public <%=DataType2CSharpType(SourceTable.Columns[i].DataType)%> <%=SourceTable.Columns[i].Name%> {get; set;}
	
	   <%}%>
	   
	   #endregion
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值