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>