• codesmith的使用


    新建一个C#模版。

    model类的模版代码如下:

    <%-- 
    Name: 模型层代码生成模版
    Author: XX
     Description: 根据数据库的内容生成模型层代码
    Version: V1.0 新规初成
    --%>
    <%@ CodeTemplate Language="C#" TargetLanguage="Text" ResponseEncoding="UTF-8"%>
    <%@ Property Name="Namespace" Type="String" Default="Model" Category="内容" Description="命名空间名称" %>
    <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="内容" Description="数据源表" %>
    <%@ Property Name="ObjectName" Type="String" Category="注释" Description="对象名称,为生成注释而用" %>
    <%@ Assembly Name="SchemaExplorer" %>
    <%@ Import Namespace="SchemaExplorer" %>
     using System;
     using System.Collections.Generic;
     using System.Text;
    
     namespace <%=Namespace%>
     {
         /// <summary>
         /// <%=ObjectName%>的模型
        /// </summary>
         [Serializable()]
         public class <%=GetClassName(SourceTable)%>
         {
             private <%=GetPrimaryKeyType(SourceTable)%> <%=GetPrimaryKeyFieldName(SourceTable)%>;
             <%
                 // 循环输出非主键列的定义
                foreach(ColumnSchema colum in SourceTable.NonPrimaryKeyColumns)
                 {
             %>
             private <%=GetDataTypeByColumn(colum)%> <%=GetFieldNameByColumn(colum)%>;
             <%
                 }
             %>
             
             public <%= GetClassName(SourceTable)%>() {}
             
             public <%=GetPrimaryKeyType(SourceTable)%> <%=GetPrimaryKeyPropertyName(SourceTable)%>
             {
                 get{ return this.<%=GetPrimaryKeyFieldName(SourceTable)%>; }
                 set{ this.<%=GetPrimaryKeyFieldName(SourceTable)%> = value; }
             }
             
             <%
                 // 循环输出非主键列的属性
                foreach(ColumnSchema colum in SourceTable.NonPrimaryKeyColumns)
                 {
             %>
             public <%=GetDataTypeByColumn(colum)%> <%=GetPropertyNameByColumn(colum)%>
             {
                 get{ return this.<%=GetFieldNameByColumn(colum)%>; }
                 set{ this.<%=GetFieldNameByColumn(colum)%> = value; }
             }
             
             <%
                 }
             %>
         }
     }
    
    
    <script runat="template">
    
         // 根据表对象获得类名称
        public string GetClassName(TableSchema table)
         {
             string tempTable;
             if (table.Name.EndsWith("s"))
             {
                 tempTable = table.Name.Substring(0,table.Name.Length-1);
             }
             else
             {
                 tempTable = table.Name;
             }
             return ConvertToPascal(tempTable);
         }
         
         // 根据表对象获得主键的类型
        public string GetPrimaryKeyType(TableSchema table)
         {
             if (table.PrimaryKey != null)
             {
                 if (table.PrimaryKey.MemberColumns.Count == 1)
                 {
                     return GetCSharpDataTypeByDBColumn(table.PrimaryKey.MemberColumns[0]);
                 }
                 else
                 {
                     throw new ApplicationException("此模板只支持单个列的主键");
                 }
             }
             else
             {
                 throw new ApplicationException("此模板需要有主键的表");
             }
         }
         
         // 根据表对象获得主键的名称(原始)
        public string GetPrimaryKeyName(TableSchema table)
         {
             if (table.PrimaryKey != null)
             {
                 if (table.PrimaryKey.MemberColumns.Count == 1)
                 {
                     return ConvertToCamel(table.PrimaryKey.MemberColumns[0].Name);
                 }
                 else
                 {
                     throw new ApplicationException("此模板只支持单个列的主键");
                 }
             }
             else
             {
                 throw new ApplicationException("此模板需要有主键的表");
             }
         }
         
         // 根据表对象获得主键的字段名(骆驼命名)
        public string GetPrimaryKeyFieldName(TableSchema table)
         {
             return ConvertToCamel(GetPrimaryKeyName(table));
         }
         
         // 根据表对象获得主键的属性名(帕斯卡命名)
        public string GetPrimaryKeyPropertyName(TableSchema table)
         {
             return ConvertToPascal(GetPrimaryKeyName(table));
         }
         
         // 根据列对象获得列的类型
        public string GetDataTypeByColumn(ColumnSchema column)
         {
             return GetCSharpDataTypeByDBColumn(column);
         }
         
         // 根据列对象获得列的字段名(骆驼命名)
        public string GetFieldNameByColumn(ColumnSchema column)
         {
             return ConvertToCamel(column.Name);
         }
         
         // 根据列对象获得列的属性名(帕斯卡命名)
        public string GetPropertyNameByColumn(ColumnSchema column)
         {
             return ConvertToPascal(column.Name);
         }
         
         // 根据列对象获得CSharp中类型
        public string GetCSharpDataTypeByDBColumn(ColumnSchema column)
         {
             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;
                 }
             }
         }
         
         // 帕斯卡命名转换
        public string ConvertToPascal(string str)
         {
             return str.Substring(0,1).ToUpper() + str.Substring(1);
         }
         
         // 骆驼命名转换
        public string ConvertToCamel(string str)
         {
             return str.Substring(0,1).ToLower() + str.Substring(1);
         }
         
         // 重写获得文件名的方法
        public override string GetFileName()
         {
             return GetClassName(SourceTable) + ".cs";
         }
    </script>
    View Code


    代码写好后,连接SQL数据库。

     

    点击图中红色处。

    (注:该数据库类型为sqlserver类型)

    添加完成后效果如下图:(该添加数据库的表全部显示出来了。)

    再列表中选择你要生成的实体类的表,单击select按钮。

    再将实体类名称写入。

    点击红色框中的按钮,进行生成。生成页面如下图:

    最后再保存到自己想要保存的地方即可。

    业务逻辑层的模版如下:

    <%-- 
    Name: 数据访问层代码生成模版
    Author: Fencer
     Description: 根据数据库的内容生成模型层代码
    Version: V1.0 新规初成
    --%>
    <%@ CodeTemplate Language="C#" TargetLanguage="Text" ResponseEncoding="UTF-8"%>
    <%@ Property Name="Namespace" Type="String" Default="SQLServerDAL" Category="内容" Description="命名空间名称" %>
    <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="内容" Description="数据源表" %>
    <%@ Property Name="ObjectName" Type="String" Category="注释" Description="对象名称,为生成注释而用" %>
    <%@ Assembly Name="System.Data" %>
    <%@ Assembly Name="SchemaExplorer" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="SchemaExplorer" %>
     using System;
     using System.Collections.Generic;
     using System.Text;
     using System.Data;
     using System.Data.SqlClient;
     using Model;
     namespace <%=Namespace%>
     {
         
         /// <summary>
         /// <%=ObjectName%>的数据访问操作
        /// </summary>
         public class <%=GetModelName(SourceTable)%>BLL
         {
             /// <summary>
             /// 添加<%=ObjectName%>
             /// </summary>
             /// <param name="<%=GetModelParameterName(SourceTable)%>"><%=ObjectName%></param>
             /// <returns>最新编号</returns>
             public int Add<%=GetModelName(SourceTable)%>(<%=GetModelName(SourceTable)%> <%=GetModelParameterName(SourceTable)%>)
             {
                 string sql = <%=GetInsertSql()%>;
                 
                 SqlParameter[] pas = new SqlParameter[]
                     {
                         <%
                             for(int i=0; i<SourceTable.NonPrimaryKeyColumns.Count; i++)
                             {
                                 ColumnSchema column = SourceTable.NonPrimaryKeyColumns[i];
                         %>
                         new SqlParameter("@<%=column.Name%>",SqlDbType.<%=GetSqlDbType(column)%>,<%=column.Size%>)<%= (i==(SourceTable.NonPrimaryKeyColumns.Count-1)? "":",")%>
                         <%
                             }
                         %>
                     };
                 
                 <%
                     for(int i=0; i<SourceTable.NonPrimaryKeyColumns.Count; i++)
                     {
                 %>
                 pas[<%=i%>].Value = <%=GetModelParameterName(SourceTable)%>.<%=ConvertToPascal(SourceTable.NonPrimaryKeyColumns[i].Name)%>;
                 <%
                     }
                 %>
                 
                 return Convert.ToInt32(SqlHelper.ExecuteNonQuery(sql, CommandType.Text, pas));
             }
             
             /// <summary>
             /// 更新<%=ObjectName%>
             /// </summary>
             /// <param name="<%=GetModelParameterName(SourceTable)%>"><%=ObjectName%></param>
             /// <returns>bool</returns>
             public bool Update<%=GetModelName(SourceTable)%>(<%=GetModelName(SourceTable)%> <%=GetModelParameterName(SourceTable)%>)
             {
                 string sql = <%=GetUpdateSql()%>;
                 
                 SqlParameter[] pas = new SqlParameter[]
                     {
                         <%
                             for(int i=0; i<SourceTable.NonPrimaryKeyColumns.Count; i++)
                             {
                                 ColumnSchema column = SourceTable.NonPrimaryKeyColumns[i];
                         %>
                         new SqlParameter("@<%=column.Name%>",SqlDbType.<%=GetSqlDbType(column)%>,<%=column.Size%>),
                         <%
                             }
                         %>
                         new SqlParameter("@<%=GetPrimaryKeyName(SourceTable)%>",SqlDbType.<%=GetSqlDbType(GetPrimaryKeyColumn(SourceTable))%>,<%=GetPrimaryKeySize(SourceTable)%>)
                     };
                 
                 <%
                     for(int i=0; i<=SourceTable.NonPrimaryKeyColumns.Count; i++)
                     {
                         if (i < SourceTable.NonPrimaryKeyColumns.Count)
                         {
                 %>
                 pas[<%=i%>].Value = <%=GetModelParameterName(SourceTable)%>.<%=ConvertToPascal(SourceTable.NonPrimaryKeyColumns[i].Name)%>;
                 <%
                         }
                         else
                         {
                 %>
                 pas[<%=i%>].Value = <%=GetModelParameterName(SourceTable)%>.<%=ConvertToPascal(GetPrimaryKeyName(SourceTable))%>;
                 <%
                         }
                     }
                 %>
                 
                 int rows = SqlHelper.ExecuteNonQuery(sql, CommandType.Text, pas);
                 return (rows == 1);
             } 
             
             /// <summary>
             /// 根据ID删除<%=ObjectName%>
             /// </summary>
             /// <param name="<%=GetPrimaryKeyFieldName(SourceTable)%>"><%=ObjectName%>ID</param>
             /// <returns>bool</returns>
             public bool Delete<%=GetModelName(SourceTable)%>By<%=GetPrimaryKeyPropertyName(SourceTable)%>(<%=GetPrimaryKeyType(SourceTable)%> <%=GetPrimaryKeyFieldName(SourceTable)%>)
             {
                 string sql = "DELETE FROM <%=SourceTable.Name%> WHERE <%=GetPrimaryKeyName(SourceTable)%>=@<%=GetPrimaryKeyName(SourceTable)%>";
                 
                 SqlParameter pa = new SqlParameter("@<%=GetPrimaryKeyName(SourceTable)%>",SqlDbType.<%=GetPrimaryKeySqlDbType(SourceTable)%>,<%=GetPrimaryKeySize(SourceTable)%>);
                 pa.Value = <%=GetPrimaryKeyFieldName(SourceTable)%>;
                 
                 int rows = SqlHelper.ExecuteNonQuery(sql, CommandType.Text, pa);
                 
                 return (rows == 1);
             }
             
             /// <summary>
             /// 根据ID查询<%=ObjectName%>
             /// </summary>
             /// <param name="<%=GetPrimaryKeyFieldName(SourceTable)%>"><%=ObjectName%>ID</param>
             /// <returns><%=ObjectName%>对象</returns>
             public <%=GetModelName(SourceTable)%> Get<%=GetModelName(SourceTable)%>By<%=GetPrimaryKeyPropertyName(SourceTable)%>(<%=GetPrimaryKeyType(SourceTable)%> <%=GetPrimaryKeyFieldName(SourceTable)%>)
             {
                 string sql = <%=GetSelectOneModelSql()%>;
                 
                 SqlParameter pa = new SqlParameter("@<%=GetPrimaryKeyName(SourceTable)%>",SqlDbType.<%=GetPrimaryKeySqlDbType(SourceTable)%>,<%=GetPrimaryKeySize(SourceTable)%>);
                 pa.Value = <%=GetPrimaryKeyFieldName(SourceTable)%>;
                 
                 using(SqlDataReader rdr = SqlHelper.ExecuteReader(sql, CommandType.Text,pa))
                 {
                     if (rdr.Read())
                     {
                         <%=GetModelName(SourceTable)%> <%=GetModelParameterName(SourceTable)%> = new <%=GetModelName(SourceTable)%>();
                         <%
                             foreach(ColumnSchema column in SourceTable.Columns)
                             {
                         %>
                         <%=GetModelParameterName(SourceTable)%>.<%=ConvertToPascal(column.Name)%> = (<%=GetCSharpDataTypeByDBColumn(column)%>)rdr["<%=column.Name%>"];
                         <%
                             }
                         %>
                         
                         return <%=GetModelParameterName(SourceTable)%>;
                     }
                 }
                 
                 return null;
             }
             
             /// <summary>
             /// 获得所有<%=ObjectName%>
             /// </summary>
             /// <returns><%=ObjectName%>集合</returns>
             public List<<%=GetModelName(SourceTable)%>> GetAll<%=GetModelName(SourceTable)%>s()
             {
                 string sql = <%=GetSelectAllModelSql()%>;
                 
                 List<<%=GetModelName(SourceTable)%>> all<%=GetModelName(SourceTable)%>s = new List<<%=GetModelName(SourceTable)%>>();
                 
                 using(SqlDataReader rdr = SqlHelper.ExecuteReader(sql, CommandType.Text))
                 {
                     while (rdr.Read())
                     {
                         <%=GetModelName(SourceTable)%> <%=GetModelParameterName(SourceTable)%> = new <%=GetModelName(SourceTable)%>();
                         <%
                             foreach(ColumnSchema column in SourceTable.Columns)
                             {
                         %>
                         <%=GetModelParameterName(SourceTable)%>.<%=ConvertToPascal(column.Name)%> = (<%=GetCSharpDataTypeByDBColumn(column)%>)rdr["<% =column.Name%>"];
                         <%
                             }
                         %>
                         
                         all<%=GetModelName(SourceTable)%>s.Add(<%=GetModelParameterName(SourceTable)%>);
                     }
                 }
                 
                 return all<%=GetModelName(SourceTable)%>s;
             }
         }
     }
    
    <script runat="template">
         public string GetClassName(TableSchema table)
         {
             string tempTable;
             if (table.Name.EndsWith("s"))
             {
                 tempTable = table.Name.Substring(0,table.Name.Length-1);
             }
             else
             {
                 tempTable = table.Name;
             }
             return tempTable;
         }
         
         public string GetModelName(TableSchema table)
         {
             return ConvertToPascal(GetClassName(table));
         }
         
         public string GetModelParameterName(TableSchema table)
         {
             return ConvertToCamel(GetClassName(table));
         }
         
         public string GetPrimaryKeyType(TableSchema table)
         {
             if (table.PrimaryKey != null)
             {
                 if (table.PrimaryKey.MemberColumns.Count == 1)
                 {
                     return GetCSharpDataTypeByDBColumn(table.PrimaryKey.MemberColumns[0]);
                 }
                 else
                 {
                     throw new ApplicationException("此模板只支持单个列的主键");
                 }
             }
             else
             {
                 throw new ApplicationException("此模板需要有主键的表");
             }
         }
         
         public ColumnSchema GetPrimaryKeyColumn(TableSchema table)
         {
             if (table.PrimaryKey != null)
             {
                 if (table.PrimaryKey.MemberColumns.Count == 1)
                 {
                     return table.PrimaryKey.MemberColumns[0];
                 }
                 else
                 {
                     throw new ApplicationException("此模板只支持单个列的主键");
                 }
             }
             else
             {
                 throw new ApplicationException("此模板需要有主键的表");
             }
         }
         
         public string GetPrimaryKeyName(TableSchema table)
         {
             if (table.PrimaryKey != null)
             {
                 if (table.PrimaryKey.MemberColumns.Count == 1)
                 {
                     return table.PrimaryKey.MemberColumns[0].Name;
                 }
                 else
                 {
                     throw new ApplicationException("此模板只支持单个列的主键");
                 }
             }
             else
             {
                 throw new ApplicationException("此模板需要有主键的表");
             }
         }
         
         public string GetPrimaryKeySize(TableSchema table)
         {
             return table.PrimaryKey.MemberColumns[0].Size.ToString();
         }
         
         public string GetPrimaryKeySqlDbType(TableSchema table)
         {
             return GetSqlDbType(table.PrimaryKey.MemberColumns[0]);
         }
         
         public string GetPrimaryKeyFieldName(TableSchema table)
         {
             return ConvertToCamel(GetPrimaryKeyName(table));
         }
         
         public string GetPrimaryKeyPropertyName(TableSchema table)
         {
             return ConvertToPascal(GetPrimaryKeyName(table));
         }
         
         public string GetInsertSql()
         {
             string sql = ""INSERT INTO " + SourceTable.Name + "(";
             foreach(ColumnSchema column in SourceTable.NonPrimaryKeyColumns)
             {
                 sql += column.Name + ",";
             }
             sql = sql.Substring(0,sql.Length-1);
             sql += ")" +
    ";
             
             sql += "				" values(";
             foreach(ColumnSchema column in SourceTable.NonPrimaryKeyColumns)
             {
                 sql += "@" + column.Name + ",";
             }
             sql = sql.Substring(0,sql.Length-1);
             sql += ")"";
             
             return sql;
         }
         
         public string GetUpdateSql()
         {
             string sql = ""UPDATE " + SourceTable.Name + " " +
    ";
             sql += "				"SET ";
             foreach(ColumnSchema column in SourceTable.NonPrimaryKeyColumns)
             {
                 sql += column.Name + "=@" + column.Name + ",";
             }
             sql = sql.Substring(0,sql.Length-1);
             sql += " " +
    ";
             
             sql += "				"WHERE " + GetPrimaryKeyName(SourceTable) + "=@" + GetPrimaryKeyName(SourceTable) + """;
             
             return sql;
         }
         
         public string GetSelectOneModelSql()
         {
             string sql = ""SELECT ";    
             foreach(ColumnSchema column in SourceTable.Columns)
             {
                 sql += column.Name + ",";
             }
             sql = sql.Substring(0,sql.Length-1);
             sql += " " +
    ";
             
             sql += "				"FROM " + SourceTable.Name + " " +
    ";
             sql += "				"WHERE " + GetPrimaryKeyName(SourceTable) + "=@" + GetPrimaryKeyName(SourceTable) + """;
             
             return sql;
         }
         
         public string GetSelectAllModelSql()
         {
             string sql = ""SELECT ";    
             foreach(ColumnSchema column in SourceTable.Columns)
             {
                 sql += column.Name + ",";
             }
             sql = sql.Substring(0,sql.Length-1);
             sql += " " +
    ";
             
             sql += "				"FROM " + SourceTable.Name + """;
             
             return sql;
         }
    
         
         public string GetCSharpDataTypeByDBColumn(ColumnSchema column)
         {
             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;
                 }
             }
         }
         
         public string GetSqlDbType(ColumnSchema column)
         {
             switch (column.NativeType)
             {
                 case "bigint": return "BigInt";
                 case "binary": return "Binary";
                 case "bit": return "Bit";
                 case "char": return "Char";
                 case "datetime": return "DateTime";
                 case "decimal": return "Decimal";
                 case "float": return "Float";
                 case "image": return "Image";
                 case "int": return "Int";
                 case "money": return "Money";
                 case "nchar": return "NChar";
                 case "ntext": return "NText";
                 case "numeric": return "Decimal";
                 case "nvarchar": return "NVarChar";
                 case "real": return "Real";
                 case "smalldatetime": return "SmallDateTime";
                 case "smallint": return "SmallInt";
                 case "smallmoney": return "SmallMoney";
                 case "sql_variant": return "Variant";
                 case "sysname": return "NChar";
                 case "text": return "Text";
                 case "timestamp": return "Timestamp";
                 case "tinyint": return "TinyInt";
                 case "uniqueidentifier": return "UniqueIdentifier";
                 case "varbinary": return "VarBinary";
                 case "varchar": return "VarChar";
                 default: return "__UNKNOWN__" + column.NativeType;
             }
         }
         
         public string ConvertToPascal(string str)
         {
             return str.Substring(0,1).ToUpper() + str.Substring(1);
         }
         
         public string ConvertToCamel(string str)
         {
             return str.Substring(0,1).ToLower() + str.Substring(1);
         }
         
         public override string GetFileName()
         {
             return GetModelName(SourceTable) + "Service.cs";
         }
         
         public string ConvertDataType(string datatype,string dataname)
         {
            string result = "";
            if(datatype=="int")
            {
                result="Convert.ToInt32("+dataname+")";
            }else if(datatype=="string")
            {
                result =dataname.ToString();
            }else if(datatype=="DateTime")
            {
                result ="Convert.ToDateTime("+dataname+")";
            }else if(datatype=="bool")
            {
                result = "Convert.ToBoolean("+dataname+")";
            }else if(datatype=="byte")
            {
                result = "Convert.ToByte("+dataname+")";
            }else 
            {
                result = "("+datatype+")"+dataname;
            }
            return result;
         }
    </script>
    View Code
  • 相关阅读:
    WRF rsl.out文件研究
    ERA-Interim 的变量TCW和VIWV可降水量
    sudo apt update 没有 Release 文件
    线性斜压模式LBM学习&安装实录
    PGI 用户手册之 Site-Specific Customization of the Compilers
    ERA5气压层数据驱动WRF的一些问题
    OpenMP fortran 学习
    crontab计划运行shell脚本,调用ncl执行失败
    CDO学习2 CDO 入门教程Tutorial
    guide, manual, tutorial之间的区别
  • 原文地址:https://www.cnblogs.com/Jokers/p/3399973.html
Copyright © 2020-2023  润新知