CodeSmith(1 生成实体)
1 一直想要写个模板,但是太懒了,最近做个项目,全部纯手写很是郁闷(老大规定了代码格式,在网上找不到现成的方式)
代码生成样子
#region 描述 //============================================================ //【创建】: //【创建时间】:2017-02-19 21:39:38:354 //【修改】: //【修改时间】: //【修改内容】: //============================================================ #endregion using System; namespace IOT3.SMS { /// <summary> /// Users实体类 /// </summary> public class C_UsersModel { #region 属性、变量 /// ///ID /// private int m_iD=0; /// ///ID /// public int ID { get{ return m_iD;} set{ m_iD=value ;} } /// ///绕弯儿无 /// private string m_serName=String.Empty; /// ///绕弯儿无 /// public string SerName { get{ return m_serName;} set{ m_serName=value ;} } /// ///企鹅无群翁 /// private string m_pupwd=String.Empty; /// ///企鹅无群翁 /// public string Pupwd { get{ return m_pupwd;} set{ m_pupwd=value ;} } #endregion #region 构造函数 /// ///构造函数 /// public C_UsersModel() { } #endregion } }
2 模板内容
<%@ Template Language="C#" TargetLanguage="C#" Src="" Inherits="" Description=""%> <%--添加程序集--%> <%@ Assembly Name="SchemaExplorer" %> <%--导入命名空间--%> <%@ Import Namespace="SchemaExplorer" %> <%--参数--%> <%@ Property Name="ns" Default="IOT3.SMS" Type="System.String" %> <%@ Property Name="SoureTable" Default="" Type="SchemaExplorer.TableSchema"%> <% PrintHeader(); %> using System; <%--using System.Collections.Generic; using System.Linq; using System.Text;--%> namespace <%=ns%> { /// <summary> /// <%=SoureTable.Name +"实体类"%> /// </summary> public class <%=GenerderFileName()%> { <%= "#region 属性、变量"%> <%for(int i=0;i<SoureTable.Columns.Count;i++) {%> /// ///<%=SoureTable.Columns[i].Description == "" ? SoureTable.Columns[i].Name : SoureTable.Columns[i].Description %> /// <%=GetPrivateFields(SoureTable.Columns[i]) %> /// ///<%=SoureTable.Columns[i].Description == "" ? SoureTable.Columns[i].Name : SoureTable.Columns[i].Description %> /// public <%=ConverDbTypeToCSharpType(SoureTable.Columns[i])%> <%= CoverToPasCal(SoureTable.Columns[i].Name)%> { get{ return <%=GetMemerVariableName(SoureTable.Columns[i])%>;} set{ <%=GetMemerVariableName(SoureTable.Columns[i])%>=value ;} } <% }%> <%="#endregion"%> <%= "#region 构造函数"%> /// ///构造函数 /// public <%=GenerderFileName()%>() { } <%="#endregion"%> } } <script runat="template"> /// <summary> /// 第一个字母变大 /// </summary> /// <param name="input"></param> /// <returns></returns> public string CoverToPasCal(string input) { return input[0].ToString().ToUpper()+input.Substring(1); } /// <summary> /// 第一个字母变小 /// </summary> /// <param name="input"></param> /// <returns></returns> public string CoverToPrivateCal(string input) { return input[0].ToString().ToLower()+input.Substring(1); } /// <summary> /// 将数据库中的类型变成C#类型 /// </summary> /// <param name="column"></param> /// <returns></returns> public string ConverDbTypeToCSharpType(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; } } if(column.AllowDBNull&& column.SystemType.IsValueType) { return "?"; } } /// <summary> /// 头信息 /// </summary> public void PrintHeader() { Response.WriteLine("#region 描述"); Response.WriteLine("//============================================================"); Response.WriteLine("//【创建】: "); Response.WriteLine("//【创建时间】:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff")); Response.WriteLine("//【修改】:"); Response.WriteLine("//【修改时间】:"); Response.WriteLine("//【修改内容】:"); Response.WriteLine("//============================================================"); Response.WriteLine("#endregion"); //Response.WriteLine(); } /// <summary> /// 成员变量 /// </summary> /// <param name="column"></param> /// <returns></returns> public string GetMemerVariableName(ColumnSchema column) { string propertName=column.Name; string memberVariableName = "m_" + CoverToPrivateCal(propertName); return memberVariableName; } /// <summary> /// 私有字段 /// </summary> /// <param name="column"></param> /// <returns></returns> public string GetPrivateFields(ColumnSchema column) { string statement = "private "+ ConverDbTypeToCSharpType(column) + " " + GetMemerVariableName(column)+"="; statement+=GetMemberVariableDefaultValue(column)+";"; //后面要添加默认值 todo return statement; } /// <summary> /// 生成文件名字 /// </summary> /// <param name="column"></param> /// <returns></returns> public string GenerderFileName() { return "C_"+CoverToPasCal(SoureTable.Name)+"Model"; } //根据变量类型获得默认值 public string GetMemberVariableDefaultValue(ColumnSchema column) { switch (column.DataType) { case DbType.AnsiString: return "String.Empty"; case DbType.AnsiStringFixedLength: return "String.Empty"; case DbType.Binary: return " new byte[]"; case DbType.Boolean: return "false"; case DbType.Byte: return "0"; case DbType.Currency: return "0"; case DbType.Date: return "DateTime.Now"; case DbType.DateTime: return "DateTime.Now"; case DbType.Decimal: return "0"; case DbType.Double: return "0"; case DbType.Guid: return "new Guid()"; 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 @"String.Empty"; case DbType.StringFixedLength: return "String.Empty"; //case DbType.Time: return "TimeSpan"; case DbType.UInt16: return "0"; case DbType.UInt32: return "0"; case DbType.UInt64: return "0"; case DbType.VarNumeric: return "0"; } return ""; } </script>