CodeSmith生成实体类模板

模板:

<%-- 
Name:
Author: BluceYoung
Description: 用于创建实体类
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="" Inherits="" Debug="True" Description="Create DataObject for DJ.Framework.DataAccess support." %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="Table that the object is based on." %>
<%@ Property Name="NameSpaceName" Type="System.String" Category="Options" Description="" %>
<%@ Property Name="ClassName" Type="System.String" Category="Options" Description="" %>
<%@ Property Name="Description" Type="System.String" Category="Options" Description="" %>
<%@ Property Name="CreateValidatorAttribute" Type="System.Boolean" Category="Options" Default="True" Description="Whether Create Validator Attribute." %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Assembly Name="System.Data" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.Collections.Specialized" %>
using System;
using System.Data;
using <%=NameSpaceName %>.Common

namespace <%= NameSpaceName %>.Model
{<%-- 博客地址:blog.csdn.net/bluceyoung --%>
    /// <summary>
	/// <%= Description %>
	/// </summary>
	public class <%= ClassName%> 
	{
        public String TableName
		{
			get
			{
				return "<%= SourceTable.Name %>";
			}
		}
        <%--字段和属性  --%>
        <% for (int i = 0; i < SourceTable.Columns.Count; i++) { %>
		private <%=GetNullType(SourceTable.Columns[i].SystemType.Name) %> <%=GetFieldName(SourceTable.Columns[i].Name) %>;
        /// <summary>
		/// <%= SourceTable.Columns[i].Description %>
		/// </summary>	
        public <%=GetNullType(SourceTable.Columns[i].SystemType.Name) %> <%=GetPropertyName(SourceTable.Columns[i].Name) %>
        {
            get{return <%=GetFieldName(SourceTable.Columns[i].Name) %>;}
            set{this.<%=GetFieldName(SourceTable.Columns[i].Name) %> = value;}
        }
        
		<% } %>
        
        <%--构造函数 --%>
        public <%=ClassName %>()
        {
        }
        
        /// <summary>
        /// 使用reader实例化一个对象
        /// </summary>
        /// <param name="reader"></param>
        public <%= ClassName %>(System.Data.SqlClient.SqlDataReader reader)
        {
            <% for (int i = 0; i < SourceTable.Columns.Count; i++) { %>
            if(reader["<%=SourceTable.Columns[i].Name %>"]!=DBNull.Value)
                this.<%=GetFieldName(SourceTable.Columns[i].Name) %> = reader["<%=SourceTable.Columns[i].Name %>"].<%=GetTypeValue(SourceTable.Columns[i].DataType) %>;
            <%} %>
        }
    }
}
<script runat="template">
/// <summary>
/// 获取能设置为null的数据类型
/// </summary>
/// <param name="typeName"></param>
/// <returns></returns>
private string GetNullType(string typeName)
{
    if(typeName.Equals("String"))
        return typeName;
    else
        return typeName+"?";
}

/// <summary>
/// 根据列名获取字段名:_userName; 博客地址:blog.csdn.net/bluceyoung
/// </summary>
/// <param name="colName"></param>
/// <returns></returns>
private string GetFieldName(string colName)
{
    return "_" + colName.ToCharArray()[0].ToString().ToLower()+colName.Substring(1);
}

/// <summary>
/// 根据列名获取属性名:UserName
/// </summary>
/// <param name="colName"></param>
/// <returns></returns>
private string GetPropertyName(string colName)
{
    return colName.ToCharArray()[0].ToString().ToUpper()+colName.Substring(1);
}

/// <summary>
/// 获取类型转换后缀
/// </summary>
/// <param name="t"></param>
/// <returns></returns>
private string GetTypeValue(DbType t)
{
    string str=string.Empty;
    switch(t)
    {
        case DbType.AnsiString:
        case DbType.String:str="ToString()";break;
        case DbType.Boolean:str="ToString().ToBool()";break;
        case DbType.Date:
        case DbType.DateTime2:
        case DbType.DateTime:str="ToString().ToDateTime()";break;
        case DbType.Int32:str="ToString().ToInt()";break;
        case DbType.Currency:
        case DbType.Decimal:str="ToString().ToDecimal()";break;   
        case DbType.Double:str="ToString().ToDouble()";break;
        case DbType.Int16:str="ToString().ToShort()";break;
        case DbType.Int64:str="ToString().ToLong()";break;
        default:str="";break;
    }
    return str;
}
</script>

用到的扩展类:

namespace BluceYoungPro.Common
{
    public static class ExtensionClass
    {

        /// <summary>
        /// 转换成int,字符串格式不对抛出异常
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static int ToInt(this String str)
        {
            return int.Parse(str);
        }

        /// <summary>
        /// 转换成int,转换失败则返回设定好的默认值
        /// </summary>
        /// <param name="str"></param>
        /// <param name="defaultValue">转换不成功返回的默认值</param>
        /// <returns></returns>
        public static int ToInt(this String str, int   defaultValue)
        {
            int value = 0;
            if (int.TryParse(str, out value))
            {
                return value;
            }
            else
            {
                return defaultValue;
            }
        }

        /// <summary>
        /// 转换成字符串,为null时返回默认值,不抛异常。博客地址:blog.csdn.net/bluceyoung
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="defaultStr"></param>
        /// <returns></returns>
        public static string ToString(this object obj, string defaultStr)
        {
            if (obj == null)
                return defaultStr;
            else
                return obj.ToString();
        }

        

        /// <summary>
        /// 转换成DateTime,失败抛异常
        /// </summary>
        /// <param name="str"></param>
        /// <returns><yi/returns>
        public static DateTime ToDateTime(this String str)
        {
            return DateTime.Parse(str);
        }

        /// <summary>
        /// 转换成Decimal类型,失败抛异常
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static decimal ToDecimal(this String str)
        {
            return decimal.Parse(str);
        }
        
        /// <summary>
        /// 转换成Decimal类型,失败返回默认值
        /// </summary>
        /// <param name="str"></param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        public static decimal ToDecimal(this String str, decimal defaultValue)
        {
            decimal value;
            if (decimal.TryParse(str, out value))
            {
                return value;
            }
            else
            {
                return defaultValue;
            }
        }

        /// <summary>
        /// 转换成Double类型,失败抛异常
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static double ToDouble(this String str)
        {
            return double.Parse(str);
        }

        /// <summary>
        /// 转换成Double类型,失败返回默认值
        /// </summary>
        /// <param name="str"></param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        public static double ToDouble(this String str, double defaultValue)
        {
            double value;
            if (double.TryParse(str, out value))
            {
                return value;
            }
            else
            {
                return defaultValue;
            }
        }

        /// <summary>
        /// 将指定字符串转换成bool值,"true","false","1","0",不区分大小写,其他抛出异常
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static bool ToBool(this String str)
        {
            if (str.ToLower().Equals("true") || str.Equals("1"))
                return true;
            else if (str.ToLower().Equals("false") || str.Equals("0"))
                return false;
            else
                throw new FormatException("无法识别参数的bool类型,可识别的有:true、false、1、0");
        }
    }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值