zoukankan      html  css  js  c++  java
  • 为PetaPoco添加实体模板

    Brad为我们提供了T4模板,因为公司一直在使用CodeSmith,故为其写了一个CodeSmith的模板,代码如下:

    复制代码
    <%-- 
    Name:EntityTemplates
    Author: 
    Description:Generate a entity file in C#
    --%>
    
    <%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="" Inherits="" Debug="False" Description="" ResponseEncoding="UTF-8" %>
    <%@ Property Name="Namespace" Type="System.String" Default="TianChenMeiKuang.Entity" Optional="False" Category="Strings" Description="实体类命名空间" %>
    <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="源表" %>
    <%@ Assembly Name="SchemaExplorer" %>
    <%@ Assembly Name="System.Data" %>
    <%@ Import Namespace="SchemaExplorer" %>
    <%@ Import Namespace="System.Data" %>
    /**********************************************************
     Name:<%= GetClassName(SourceTable) %>
     Author:
     Date:<%=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") %>
     Description:
     Modify Remark:
    **********************************************************/
    using System;
    using WebApp.Matrix.Data;
    
    namespace <%=Namespace%>
    {
        /// <summary>
        /// This Entity is Mapping To [<%=SourceTable.Name%>] Table
        /// Remark Ignore Attribute for the field when it is not need mapping
        /// </summary>
        [Serializable]
        [TableName("[<%=SourceTable.Name%>]")]
        <% 
        ColumnSchema primaryKeyColumn = GetPrimaryKeyColumn();
        if(primaryKeyColumn != null)
        {
            if(Convert.ToBoolean(primaryKeyColumn.ExtendedProperties["CS_isIdentity"].Value)==true){ %>
        [PrimaryKey("<%=primaryKeyColumn.Name%>", autoIncrement=true)]
            <% } 
            else {
            %>
        [PrimaryKey("<%=primaryKeyColumn.Name%>", autoIncrement=false)]
            <% }
        }%>
        public class <%= GetClassName(SourceTable) %>
        {        
            <% for (int i = 0; i < SourceTable.Columns.Count; i++) { %>
            /// <summary>
            /// <%= SourceTable.Columns[i].Name %>
            /// </summary>
            public <%= GetCSharpVariableType(SourceTable.Columns[i]) %> <%= GetPropertyName(SourceTable.Columns[i]) %>
            {
                get; set;
            }
            <% if (i < SourceTable.Columns.Count - 1) Response.Write("
    "); %>        
            <% } %>
            
            /// <summary>
            /// Equals
            /// </summary>
            public override bool Equals(object obj)
            {
                <%= GetClassName(SourceTable) %> other = obj as <%= GetClassName(SourceTable) %>;
                if (<%=GetFirstKeyCondition()%>)
                {
                    return false;
                }
                if (<%=GetTwoKeyCondition()%>)
                {
                    return false;
                }
                return true;
            }
            /// <summary>
            /// GetHashCode
            /// </summary>
            public override int GetHashCode()
            {
                return base.GetHashCode();
            }
        }
    }
    
    <script runat="template">
    public string GetClassName(TableSchema table)
    {
        string className = table.Name;
        return className;
    }
    public string GetPropertyName(ColumnSchema column)
    {
        string propertyName = column.Name;
        
        return propertyName;
    }
    public string GetFieldName(ColumnSchema column)
    {
        string propertyName = column.Name;
        return propertyName;
    }
    public ColumnSchema GetPrimaryKeyColumn()
    {
        for (int i = 0; i < SourceTable.Columns.Count; i++)
        {
            if(SourceTable.Columns[i].IsPrimaryKeyMember)
            {
                return     SourceTable.Columns[i];
            }
        }
        return null;
    }
    public string GetKey()
    {
        for (int i = 0; i < SourceTable.Columns.Count; i++)
        {
            if(SourceTable.Columns[i].IsPrimaryKeyMember)
            {
                return     SourceTable.Columns[i].Name;
            }
        }
        return "GetHashCode().ToString()";
    }
    public string GetCSharpVariableType(ColumnSchema column)
    {
        switch (column.DataType)
        {
            case DbType.AnsiString: return "string";
            case DbType.AnsiStringFixedLength: return "string";
            case DbType.Binary: return "Nullable<int>";
            case DbType.Boolean: if(column.AllowDBNull){return "Nullable<bool>";}else{return "bool";};
            case DbType.Byte: return "int";
            case DbType.Currency: if(column.AllowDBNull){return "Nullable<decimal>";}else{return "decimal";};
            case DbType.Date: if(column.AllowDBNull){return "Nullable<DateTime>";}else{return "DateTime";};
            case DbType.DateTime: if(column.AllowDBNull){return "Nullable<DateTime>";}else{return "DateTime";};
            case DbType.Decimal: if(column.AllowDBNull){return "Nullable<decimal>";}else{return "decimal";};
            case DbType.Double: if(column.AllowDBNull){return "Nullable<double>";}else{return "double";};
            case DbType.Guid: return "Guid";
            case DbType.Int16: if(column.AllowDBNull){return "Nullable<short>";}else{return "short";};
            case DbType.Int32: if(column.AllowDBNull){return "Nullable<int>";}else{return "int";};
            case DbType.Int64: if(column.AllowDBNull){return "Nullable<long>";}else{return "long";};
            case DbType.Object: return "object";
            case DbType.SByte: if(column.AllowDBNull){return "Nullable<sbyte>";}else{return "sbyte";};
            case DbType.Single: if(column.AllowDBNull){return "Nullable<float>";}else{return "float";};
            case DbType.String: return "string";
            case DbType.StringFixedLength: return "string";
            case DbType.Time: if(column.AllowDBNull){return "Nullable<TimeSpan>";}else{return "TimeSpan";};
            case DbType.UInt16: if(column.AllowDBNull){return "Nullable<ushort>";}else{return "ushort";};
            case DbType.UInt32: if(column.AllowDBNull){return "Nullable<uint>";}else{return "uint";};
            case DbType.UInt64: if(column.AllowDBNull){return "Nullable<ulong>";}else{return "ulong";};
            case DbType.VarNumeric: if(column.AllowDBNull){return "Nullable<decimal>";}else{return "decimal";};
            default:return "string";
        }
    }
    public string GetFirstKeyCondition()
    {
        string condition = " other==null";
        for (int i = 0; i < SourceTable.Columns.Count; i++)
        {
            var tempColumn = SourceTable.Columns[i];
            if(tempColumn.IsPrimaryKeyMember)
            {
                if(((bool)tempColumn.ExtendedProperties["CS_IsIdentity"].Value))
                {
                    condition += " || this." + SourceTable.Columns[i].Name + " == 0";
                    condition += " || other."+ SourceTable.Columns[i].Name + " == 0";
                }
                else
                {
                    condition += " || string.IsNullOrEmpty(this." + SourceTable.Columns[i].Name + ")";
                    condition += " || string.IsNullOrEmpty(other."+ SourceTable.Columns[i].Name + ")";
                }
            }
        }
        return condition;
    }
    public string GetTwoKeyCondition()
    {
        string condition = " ";
        for (int i = 0; i < SourceTable.Columns.Count; i++)
        {
            if(SourceTable.Columns[i].IsPrimaryKeyMember)
            {
                 condition += " || this."+SourceTable.Columns[i].Name +" !=other."+SourceTable.Columns[i].Name;
            }
        }
        return condition.Substring(4,condition.Length-4).ToString();
    }
    public string GetHashCodeStr()
    {
        string hashCode = " ";
        for (int i = 0; i < SourceTable.Columns.Count; i++)
        {
            if(SourceTable.Columns[i].IsPrimaryKeyMember)
            {
                 hashCode += "+"|" +this."+SourceTable.Columns[i].Name +".ToLower()";
            }
        }
        return hashCode.Substring(7,hashCode.Length-7).ToString();
    }
    public string GetDefaultValue(ColumnSchema column)
    {
        string DefaultValue = "";
        switch(column.DataType)
        {
            case DbType.Int16:
            case DbType.Int32:
            case DbType.Int64:
                DefaultValue = "0";    
                break;
            case DbType.Decimal:
                DefaultValue = "0.000000M";
                break;
            case DbType.AnsiString:
            case DbType.String:
            case DbType.StringFixedLength:
                DefaultValue = """";
                break;
            case DbType.Date:
            case DbType.DateTime:
            case DbType.DateTime2:
                DefaultValue = "DateTime.Parse("1999-01-01 00:00:00")";
                break;
            case DbType.Binary:
                DefaultValue = "new byte[] { }";
                break;
            case DbType.Boolean:
                DefaultValue = "False";
                break;
            case DbType.Byte:
                DefaultValue = "1";
                break;
            default:
                break;
        }
        return DefaultValue;
    }
    </script>
    复制代码

    该模板只适用于但主键的环境,且主键必须为字符串类型,或者为自增长列。

    来源:http://www.cnblogs.com/youring2

  • 相关阅读:
    File类总结
    MyBatis框架一级缓存与二级缓存
    SpringMVC运行原理总结
    SpringMVC:详述拦截器
    SpringMVC:自定义视图及其执行过程
    详述ThreadLocal
    浅析MVC中的数据流动
    error: gpg failed to sign the data 的一个解决办法
    保险业务核心系统设计参考
    奇怪的404
  • 原文地址:https://www.cnblogs.com/jiangqw/p/4502731.html
Copyright © 2011-2022 走看看