二.codesmith 生成 hibernate 中的实体类

需要先安装codeSmith6.5 
<%-- 
Name: NHibernate template
Author: Henry
Description: autogen .cs files
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="" Inherits="" Debug="False" Description="Template description here." %>
<%@ Property Name="SampleStringProperty" Type="System.String" Default="SomeValue" Optional="True" Category="Strings" Description="This is a sample string property."%>
<%@ Property Name="SampleBooleanProperty" Type="System.Boolean" Default="True" Optional="False" Category="Booleans" Description="This is a sample boolean property."%>

<%@ Assembly Name="System.Data" %>
<%@ Import Namespace="System.Data" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>
<%--模板属性--%>
<%@ Property Name="DataBase" Type="SchemaExplorer.DatabaseSchema" Category="Context" Description="数据库连接." %>
<%@ Property Name="TableName" Type="System.String" Default="" Optional="False" Category="" Description="表名" %>
<%@ Property Name="NameSpace" Type="System.String" Default="Company.Product.Module" Optional="False" Category="" Description="命名空间" %>
<%@ Property Name="Author" Type="System.String" Default="Author" Optional="False" Category="" Description="作者" %>
<%@ Property Name="Description" Type="System.String" Default="实体类" Optional="False" Category="" Description="该类的描述" %> 


<script runat="template">
CodeTemplateRule rule=new CodeTemplateRule();

   public class CodeTemplateRule
    {
        /**//// <summary>
        /// 获取所有列的集合
        /// </summary>
        /// <param name="dataBase">数据库Schema</param>
        /// <param name="tableName">表名</param>
        /// <returns>Columns Schema</returns>
        public ColumnSchemaCollection GetColumnCollection(DatabaseSchema dataBase,string tableName)
        {
            TableSchemaCollection tables = new TableSchemaCollection(dataBase.Tables);
            ColumnSchemaCollection columns=null;
            for(int i=0;i<tables.Count;i++)
            {
                if(tables[i].Name.ToUpper()==tableName.ToUpper())
                {
                    TableSchema ts=tables[i];
                    columns=new ColumnSchemaCollection(ts.Columns);
                }
            }
            return columns;
        }
        
        /**//// <summary>
        /// 获取处理后的表名 例如:ORG_Person,返回Person
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <returns>返回处理后的表名</returns>
        public string GetTableName(string tableName)
        {
            int i=tableName.IndexOf("_");
            return tableName.Substring(i+1,tableName.Length-(i+1));
        }
        
        /**//// <summary>
        /// 获取唯一号的变量名,第一个字母小写
        /// </summary>
        /// <param name="guidColumn">唯一号列名</param>
        /// <returns>唯一号的变量名</returns>
        public string GetGuidColumnVar(string guidColumn)
        {
            string guid;
            guid=guidColumn.Substring(0,1).ToLower()+guidColumn.Substring(1,guidColumn.Length-1);
            return guid;    
        }        
        
        /**//// <summary>
        /// 获取c#变量类型
        /// </summary>
        /// <param name="column"></param>
        /// <returns>c#变量类型</returns>
        public string GetType(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 "int";
                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;
                }
            }
        }

        /**//// <summary>
        /// 获取c#变量类型默认值
        /// </summary>
        /// <param name="column"></param>
        /// <returns>c#变量类型默认值</returns>
        public string GetDefaultValue(ColumnSchema column)
        {
            if (column.Name.EndsWith("TypeCode")) return column.Name;
            
            switch (column.DataType)
            {
                case DbType.AnsiString: return "\"\"";
                case DbType.AnsiStringFixedLength: return "\"\"";
                case DbType.Binary: return "null";
                case DbType.Boolean: return "false";
                case DbType.Byte: return "0";
                case DbType.Currency: return "0";
                case DbType.Date: return "DateTime.Parse(\"1900-1-1\")";
                case DbType.DateTime: return "DateTime.Parse(\"1900-1-1\")";
                case DbType.Decimal: return "0";
                case DbType.Double: return "0";
                case DbType.Guid: return "Guid.NewGuid().ToString()";
                case DbType.Int16: return "0";
                case DbType.Int32: return "0";
                case DbType.Int64: return "0";
                case DbType.Object: return "\"\"";
                case DbType.SByte: return "0";
                case DbType.Single: return "0";
                case DbType.String: return "\"\"";
                case DbType.StringFixedLength: return "";
                case DbType.Time: return "DateTime.Parse(\"1900-1-1\")";
                case DbType.UInt16: return "0";
                case DbType.UInt32: return "0";
                case DbType.UInt64: return "0";
                case DbType.VarNumeric: return "0";
                default:
                {
                    return "__UNKNOWN__" + column.NativeType;
                }
            }
        }

        /**//// <summary>
        /// 获取c#变量类型默认值
        /// </summary>
        /// <param name="column"></param>
        /// <returns>c#变量类型默认值</returns>
        public string GetConvert(ColumnSchema column)
        {
            if (column.Name.EndsWith("TypeCode")) return column.Name;
            
            switch (column.DataType)
            {
                case DbType.AnsiString: return "Convert.ToString";
                case DbType.AnsiStringFixedLength: return "Convert.ToString";
                case DbType.Binary: return "Convert.ToByte";
                case DbType.Boolean: return "Convert.ToBoolean";
                case DbType.Byte: return "Convert.ToInt32";
                case DbType.Currency: return "Convert.ToDecimal";
                case DbType.Date: return "Convert.DateTime";
                case DbType.DateTime: return "Convert.DateTime";
                case DbType.Decimal: return "Convert.ToDecimal";
                case DbType.Double: return "Convert.ToDouble";
                case DbType.Guid: return "Convert.ToString";
                case DbType.Int16: return "Convert.ToInt16";
                case DbType.Int32: return "Convert.ToInt32";
                case DbType.Int64: return "Convert.ToInt64";
                case DbType.Object: return "Convert.ToString";
                case DbType.SByte: return "Convert.ToByte";
                case DbType.Single: return "Convert.ToInt32";
                case DbType.String: return "Convert.ToString";
                case DbType.StringFixedLength: return "Convert.ToString";
                case DbType.Time: return "Convert.DateTime";
                case DbType.UInt16: return "Convert.ToUInt16";
                case DbType.UInt32: return "Convert.ToUInt32";
                case DbType.UInt64: return "Convert.ToUInt64";
                case DbType.VarNumeric: return "Convert.ToDecimal";
                default:
                {
                    return "__UNKNOWN__" + column.NativeType;
                }
            }
        }
        
        public string ConvPropertyName(string name)
        {
            return name.Substring(0,1).ToUpper() +
                name.Substring(1);
        }
    }
</script>

using System;

namespace <%= NameSpace %>
{
    /// <summary>
    /// 作用:<%= Description %>
    /// 作者:<%= Author %>
    /// 日期:<%= DateTime.Now.ToString() %>
    ///</summary>
    public class <%= rule.ConvPropertyName(rule.GetTableName(TableName)) %>Entity
    {
        /// <summary>
        /// 构造函数
        ///</summary>
        public <%= rule.ConvPropertyName(rule.GetTableName(TableName)) %>Entity()
        {
        }  
  
  <%
   //局部变量
   ColumnSchemaCollection columns=rule.GetColumnCollection(DataBase,TableName);
   for(int i=0;i<columns.Count;i++)
   {
    Response.Write("        //"+columns[i].Description+"\r\n");
    Response.Write("        private "+rule.GetType(columns[i])+" m_"+columns[i].Name+";\r\n");
   }
  %>  
  
          #region properties
  <%
   //属性
   for(int i=0;i<columns.Count;i++)
   {
  %> 
          ///<summary>
        ///<%= columns[i].Description %>
        ///</summary>
        public <%= rule.GetType(columns[i]) %> <%= rule.ConvPropertyName(columns[i].Name) %>
        {
            get { return m_<%= columns[i].Name %>; }
            set { m_<%= columns[i].Name %>=value; }
        }
  <%   
   }
  %>  
          #endregion
    }
}
 
 
 
 生成 .hbm.xml 文件
<%-- 
Name: NHibernate template generator
Author: Henry
Description: autogen .hbm.xml files
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="" Inherits="" Debug="False" Description="Template description here." %>
<%@ Assembly Name="System.Data" %>
<%@ Import Namespace="System.Data" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>
<%--模板属性--%>
<%@ Property Name="DataBase" Type="SchemaExplorer.DatabaseSchema" Category="Context" Description="数据库连接." %>
<%@ Property Name="TableName" Type="System.String" Default="" Optional="False" Category="" Description="表名" %>
<%@ Property Name="NameSpace" Type="System.String" Default="Company.Product.Module" Optional="False" Category="" Description="命名空间" %>
<%@ Property Name="Author" Type="System.String" Default="Author" Optional="False" Category="" Description="作者" %>
<%@ Property Name="Description" Type="System.String" Default="实体类" Optional="False" Category="" Description="该类的描述" %> 
<%@ Property Name="Assembly" Type="System.String" Default="3GWap.Core" Optional="False" Category="" Description="库名" %>

<script runat="template">
CodeTemplateRule rule=new CodeTemplateRule();

   public class CodeTemplateRule
    {
        /**//// <summary>
        /// 获取所有列的集合
        /// </summary>
        /// <param name="dataBase">数据库Schema</param>
        /// <param name="tableName">表名</param>
        /// <returns>Columns Schema</returns>
        public ColumnSchemaCollection GetColumnCollection(DatabaseSchema dataBase,string tableName)
        {
            TableSchemaCollection tables = new TableSchemaCollection(dataBase.Tables);
            ColumnSchemaCollection columns=null;
            for(int i=0;i<tables.Count;i++)
            {
                if(tables[i].Name.ToUpper()==tableName.ToUpper())
                {
                    TableSchema ts=tables[i];
                    columns=new ColumnSchemaCollection(ts.Columns);
                }
            }
            return columns;
        }
        
        /**//// <summary>
        /// 获取处理后的表名 例如:ORG_Person,返回Person
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <returns>返回处理后的表名</returns>
        public string GetTableName(string tableName)
        {
            int i=tableName.IndexOf("_");
            return tableName.Substring(i+1,tableName.Length-(i+1));
        }
        
        /**//// <summary>
        /// 获取唯一号的变量名,第一个字母小写
        /// </summary>
        /// <param name="guidColumn">唯一号列名</param>
        /// <returns>唯一号的变量名</returns>
        public string GetGuidColumnVar(string guidColumn)
        {
            string guid;
            guid=guidColumn.Substring(0,1).ToLower()+guidColumn.Substring(1,guidColumn.Length-1);
            return guid;    
        }        
        
        /**//// <summary>
        /// 获取c#变量类型
        /// </summary>
        /// <param name="column"></param>
        /// <returns>c#变量类型</returns>
        public string GetType(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 "int";
                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;
                }
            }
        }

        /**//// <summary>
        /// 获取c#变量类型默认值
        /// </summary>
        /// <param name="column"></param>
        /// <returns>c#变量类型默认值</returns>
        public string GetDefaultValue(ColumnSchema column)
        {
            if (column.Name.EndsWith("TypeCode")) return column.Name;
            
            switch (column.DataType)
            {
                case DbType.AnsiString: return "\"\"";
                case DbType.AnsiStringFixedLength: return "\"\"";
                case DbType.Binary: return "null";
                case DbType.Boolean: return "false";
                case DbType.Byte: return "0";
                case DbType.Currency: return "0";
                case DbType.Date: return "DateTime.Parse(\"1900-1-1\")";
                case DbType.DateTime: return "DateTime.Parse(\"1900-1-1\")";
                case DbType.Decimal: return "0";
                case DbType.Double: return "0";
                case DbType.Guid: return "Guid.NewGuid().ToString()";
                case DbType.Int16: return "0";
                case DbType.Int32: return "0";
                case DbType.Int64: return "0";
                case DbType.Object: return "\"\"";
                case DbType.SByte: return "0";
                case DbType.Single: return "0";
                case DbType.String: return "\"\"";
                case DbType.StringFixedLength: return "";
                case DbType.Time: return "DateTime.Parse(\"1900-1-1\")";
                case DbType.UInt16: return "0";
                case DbType.UInt32: return "0";
                case DbType.UInt64: return "0";
                case DbType.VarNumeric: return "0";
                default:
                {
                    return "__UNKNOWN__" + column.NativeType;
                }
            }
        }

        /**//// <summary>
        /// 获取c#变量类型默认值
        /// </summary>
        /// <param name="column"></param>
        /// <returns>c#变量类型默认值</returns>
        public string GetConvert(ColumnSchema column)
        {
            if (column.Name.EndsWith("TypeCode")) return column.Name;
            
            switch (column.DataType)
            {
                case DbType.AnsiString: return "Convert.ToString";
                case DbType.AnsiStringFixedLength: return "Convert.ToString";
                case DbType.Binary: return "Convert.ToByte";
                case DbType.Boolean: return "Convert.ToBoolean";
                case DbType.Byte: return "Convert.ToInt32";
                case DbType.Currency: return "Convert.ToDecimal";
                case DbType.Date: return "Convert.DateTime";
                case DbType.DateTime: return "Convert.DateTime";
                case DbType.Decimal: return "Convert.ToDecimal";
                case DbType.Double: return "Convert.ToDouble";
                case DbType.Guid: return "Convert.ToString";
                case DbType.Int16: return "Convert.ToInt16";
                case DbType.Int32: return "Convert.ToInt32";
                case DbType.Int64: return "Convert.ToInt64";
                case DbType.Object: return "Convert.ToString";
                case DbType.SByte: return "Convert.ToByte";
                case DbType.Single: return "Convert.ToInt32";
                case DbType.String: return "Convert.ToString";
                case DbType.StringFixedLength: return "Convert.ToString";
                case DbType.Time: return "Convert.DateTime";
                case DbType.UInt16: return "Convert.ToUInt16";
                case DbType.UInt32: return "Convert.ToUInt32";
                case DbType.UInt64: return "Convert.ToUInt64";
                case DbType.VarNumeric: return "Convert.ToDecimal";
                default:
                {
                    return "__UNKNOWN__" + column.NativeType;
                }
            }
        }
        
        public string ConvPropertyName(string name)
        {
            return name.Substring(0,1).ToUpper() +
                name.Substring(1);
        }
        
        public string GetHbmType(ColumnSchema column)
        {
            if (column.Name.EndsWith("TypeCode")) return column.Name;
            
            switch (column.DataType)
            {
                case DbType.AnsiString: return "String";
                default: return column.DataType.ToString();
            }
        }
    }
</script>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
    <class name="<%= NameSpace %>.<%= rule.ConvPropertyName(rule.GetTableName(TableName)) %>, <%= Assembly %>" table="<%= TableName %>">
  <%
   //局部变量
   ColumnSchemaCollection columns=rule.GetColumnCollection(DataBase,TableName);
   for(int i=0;i<columns.Count;i++)
   {
    Response.Write("        ");
    Response.Write("<property name=\"" + rule.ConvPropertyName(columns[i].Name) + "\"");
    Response.Write(" type=\"" + rule.GetHbmType(columns[i]) + "\"");
    if (columns[i].Size != 0)
        Response.Write(" length=\"" + columns[i].Size + "\"");
    Response.Write(" column=\"" + columns[i].Name + "\"");
    Response.Write("/>\r\n");
   }
  %>  
    </class>
</hibernate-mapping>

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值