为PetaPoco添加实体模板

简介:

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

复制代码
<%-- 
Name:EntityTemplates
Author:Qi Fei 
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("\r\n"); %>        
        <% } %>
        
        /// <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/archive/2012/06/20/2556460.html,如需转载请自行联系原作者
相关文章
查看一个实体的类型(包括自定义实体)
查看一个实体的类型(包括自定义实体)
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
命名实体识别的一点经验与技巧(上)
命名实体识别的一点经验与技巧(上)
115 0
|
7月前
|
数据采集 机器学习/深度学习 自然语言处理
命名实体识别的一点经验与技巧(下)
命名实体识别的一点经验与技巧(下)
|
6天前
|
存储 自然语言处理
平台设计-代码字段与标签
在平台里描述对象的属性可以使用代码和标签
|
6天前
|
SQL 前端开发 Java
三级分类的数据表设计和构造API数据
三级分类的数据表设计和构造API数据
40 0
|
8月前
|
机器学习/深度学习 运维 监控
什么是用户实体行为分析(UEBA)
数字新时代正在加速全面到来,网络环境变得更加多元、人员变得更复杂、接入方式多种多样,网络边界逐渐模糊甚至消失,同时伴随着企业数据的激增。数字化转型促进组织的业务发展的同时,也带来了重大的网络安全挑战。安全是人和人攻防对抗的游戏,一切的意图都需要通过行为表达,这是安全运营中最重要也最有价值的一块拼图,同时也是传统方式最欠缺的。针对传统方式的不足,安全行业逐步加强基于大数据驱动,机器学习、概率分析、模式识别等的以“行为”为核心的检测分析。 用户实体行为分析(UEBA)应运而生。
640 1
“关联表单”组件文本数据筛选只支持包含条件的解决方案
在“关联表单”中使用数据筛选功能筛选文本时条件只有”包含“,此文章通过增加一个”下拉单选“组件,变相解决这个问题。
157 0
|
XML 数据格式 开发者
定义实体|学习笔记
快速学习定义实体
|
Java 开发者
分类模块之创建相关类
快速学习分类模块之创建相关类