• CodeSmith使用存档


    IDAL

    生成之前要在sqlserver配置管理器确认sql服务是否开启。

    <%@ CodeTemplate Language="C#" TargetLanguage="Text" PageEncoding="UTF-8" Src="" Inherits="" Debug="False" Description="Template description here." %>
    <%@ Property Name="SourceTable" PageEncosing="UTF-8" Type="SchemaExplorer.TableSchema" Default="" Optional="True" Category="Tables" Description="This is a Table." %>
    <%@ Property Name="ProjectName" Type="System.String" Default="IBeiFeng" Optional="False" Category="Strings" Description="This is Project Name"%>
    <%@ Assembly Name="SchemaExplorer" %>
    <%@ Import Namespace="SchemaExplorer" %>//
    //:<%= DateTime.Now.ToLongDateString()%>
    ///
    using System.Data;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System;
    using <%= ProjectName%>Model;
    ​
    ​
    namespace <%= ProjectName%>IDAL
    {
        ///
        //<%= GetClassName(SourceTable)%>
        ///
        public interface <%= GetInterfaceName(SourceTable)%>
        {
             <%= GetClassName(SourceTable)%>Entity Select<%= GetClassName(SourceTable)%>ByID(<%= GetCSharpVariableType(SourceTable.PrimaryKey.MemberColumns[0])%> t<%= GetMemberVariableName(SourceTable.PrimaryKey.MemberColumns[0])%>);
            
             IList<<%= GetClassName(SourceTable)%>Entity> GetAll<%= GetClassName(SourceTable)%>();
                    
            <%
            foreach(ColumnSchema column in SourceTable.ForeignKeyColumns)
            {
            %>      
             IList<<%= GetClassName(SourceTable)%>Entity> GetAll<%= GetClassName(SourceTable)%>By<%= column.Name%>(<%= GetCSharpVariableType(column)%> t<%= GetMemberVariableName(column)%>);
            
            <%
            }       
            %>
        
              int Insert<%= GetClassName(SourceTable)%>(<%= GetClassName(SourceTable)%>Entity t_<%= GetClassName(SourceTable)%>);
            
              int Update<%= GetClassName(SourceTable)%>(<%= GetClassName(SourceTable)%>Entity t_<%= GetClassName(SourceTable)%>);
            
              int Delete<%= GetClassName(SourceTable)%>(<%= GetCSharpVariableType(SourceTable.PrimaryKey.MemberColumns[0])%> t<%= GetMemberVariableName(SourceTable.PrimaryKey.MemberColumns[0])%>);
        }
    }
    ​
    ​
    <script runat="template">
        public string GetMemberVariableDeclarationStatement(ColumnSchema column)
    {
        return GetMemberVariableDeclarationStatement("protected", column);
    }
    ​
    public string GetColumns(TableSchema table)
    {
        string temp="";
        foreach(ColumnSchema column in table.Columns)
        {
            temp+="@"+GetPascalMemberVariableName(column)+",";
        }
        return temp.Substring(0,temp.Length-1);
    }
    ​
    public string GetUpdateColumns(TableSchema table)
    {
        string temp="";
        foreach(ColumnSchema column in table.NonPrimaryKeyColumns)
        {
            temp+=column.Name+"=@"+GetPascalMemberVariableName(column)+",";
        }
        temp=temp.Substring(0,temp.Length-1);
        temp+=" where "+table.PrimaryKey.MemberColumns[0].Name+"="+"@"+GetPascalMemberVariableName(table.PrimaryKey.MemberColumns[0]);
        return temp;
    }
    ​
    public string GetPascalMemberVariableName(ColumnSchema column)
    {
        string propertyName = GetPropertyName(column);  
        
        string temp= propertyName.Substring(0,1).ToUpper()+propertyName.Substring(1);
        
        return temp;
    }
    ​
    public string GetMemberVariableDeclarationStatement(string protectionLevel, ColumnSchema column)
    {
        string statement = protectionLevel + " ";
        statement += GetCSharpVariableType(column) + " " + GetMemberVariableName(column);
        
        string defaultValue = GetMemberVariableDefaultValue(column);
        if (defaultValue != "")
        {
            statement += " = " + defaultValue;
        }
        
        statement += ";";
        
        return statement;
    }
    ​
    public string GetReaderAssignmentStatement(ColumnSchema column, int index)
    {
        string statement = "if (!reader.IsDBNull(" + index.ToString() + ")) ";
        statement += GetMemberVariableName(column) + " = ";
        
        if (column.Name.EndsWith("TypeCode")) statement += "(" + column.Name + ")";
        
        statement += "reader." + GetReaderMethod(column) + "(" + index.ToString() + ");";
        
        return statement;
    }
    ​
    public string GetCamelCaseName(string value)
    {
        return value.Substring(0, 1).ToLower() + value.Substring(1);
    }
    ​
    public string GetMemberVariableName(ColumnSchema column)
    {
        string propertyName = GetPropertyName(column);
        string memberVariableName = "_" + GetCamelCaseName(propertyName);
        
        return memberVariableName;
    }
    ​
    public string GetPropertyName(ColumnSchema column)
    {
        string propertyName = column.Name;
        
        if (propertyName == column.Table.Name + "Name") return "Name";
        if (propertyName == column.Table.Name + "Description") return "Description";
        
        if (propertyName.EndsWith("TypeCode")) propertyName = propertyName.Substring(0, propertyName.Length - 4);
        
        return propertyName;
    }
            
    public string GetMemberVariableDefaultValue(ColumnSchema column)
    {
        switch (column.DataType)
        {
            case DbType.Guid:
            {
                return "Guid.Empty";
            }
            case DbType.AnsiString:
            case DbType.AnsiStringFixedLength:
            case DbType.String:
            case DbType.StringFixedLength:
            {
                return "String.Empty";
            }
            default:
            {
                return "";
            }
        }
    }
    ​
    public string GetCSharpVariableType(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;
            }
        }
    }
    ​
    public string GetReaderMethod(ColumnSchema column)
    {
        switch (column.DataType)
        {
            case DbType.Byte:
            {
                return "GetByte";
            }
            case DbType.Int16:
            {
                return "GetInt16";
            }
            case DbType.Int32:
            {
                return "GetInt32";
            }
            case DbType.Int64:
            {
                return "GetInt64";
            }
            case DbType.AnsiStringFixedLength:
            case DbType.AnsiString:
            case DbType.String:
            case DbType.StringFixedLength:
            {
                return "GetString";
            }
            case DbType.Boolean:
            {
                return "GetBoolean";
            }
            case DbType.Guid:
            {
                return "GetGuid";
            }
            case DbType.Currency:
            case DbType.Decimal:
            {
                return "GetDecimal";
            }
            case DbType.DateTime:
            case DbType.Date:
            {
                return "GetDateTime";
            }
            case DbType.Binary:
            {
                return "GetBytes";
            }
            default:
            {
                return "__SQL__" + column.DataType;
            }
        }
    }
    ​
    public string GetClassName(TableSchema table)
    {
        if (table.Name.EndsWith("s"))
        {
            return table.Name.Substring(0, table.Name.Length - 1);
        }
        else
        {
            return table.Name;
        }
    }
    ​
    public string GetInterfaceName(TableSchema table)
    {
        string t="";
        if (table.Name.EndsWith("s"))
        {
            t= table.Name.Substring(0, table.Name.Length - 1);
        }
        else
        {
            t= table.Name;
        }
        return "I"+t[0].ToString().ToUpper()+t.Substring(1);
    }
    public string GetPascalCaseName(string value)
    {
        return value.Substring(0, 1).ToUpper() + value.Substring(1);
    }
    ​
    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 GetPrimaryKeyType(TableSchema table)
    {
        if (table.PrimaryKey != null)
        {
            if (table.PrimaryKey.MemberColumns.Count == 1)
            {
                return GetCSharpVariableType(table.PrimaryKey.MemberColumns[0]);
            }
            else
            {
                throw new ApplicationException("This template will not work on primary keys with more than one member column.");
            }
        }
        else
        {
            throw new ApplicationException("This template will only work on tables with a primary key.");
        }
    }
    ​
    public override string GetFileName()
    {
        return this.GetClassName(this.SourceTable) + ".cs";
    }
    ​
    ​
    </script>

    BLL

    <%@ Template Language="C#" TargetLanguage="Text"  Encoding="utf-8"%>
    <%@ Property Name="SourceTable" Default="" Type="SchemaExplorer.TableSchema" %>
    <%@ Property Name="ProjectName" Type="System.String" Default="eyblog" Optional="False" Category="Strings" Description="this is my blog" %>
    <%@ Assembly Name="SchemaExplorer" %>
    <%@ Import Namespace="SchemaExplorer"%>
    ​
    ​
    <%@ Map Name="SqlCSharp" Src="Sql-CSharp" Description="System to C# Type Map" %>
    <%@ Map Name="DbDataReader" Src="DbType-DataReaderMethod" Description="DbType to DataReader Method Map" %>
    <%@ Map Name="SqlNativeSqlDb" Src="SqlNativeType-SqlDbType" Description="SqlNativeType to SqlDbType Map" %>
    <%@ Map Name="DbTypeCSharp" Src="DbType-CSharp" Description="DbType to CSharp Map" %>using System.Collections.Generic;
    using System.Data.SqlClient;
    using System;
    using <%=ProjectName%>Model;
    using <%=ProjectName%>DBUtility;
    using <%=ProjectName%>IDAL;
    using <%=ProjectName%>DALFactory;
    namespace <%=ProjectName%>BLL
    {
    ​
        public static class <%=GetClassName(SourceTable)%>
        {
            public static <%=ProjectName%>IDAL.<%= GetInterfaceName(SourceTable)%> dal=<%=ProjectName%>DALFactory.DataAccess.Create<%=GetClassName(SourceTable)%>();
            //查询单个数据
            public  static <%=GetClassName(SourceTable)%>Entity Select<%=GetClassName(SourceTable)%>ByID(<%=GetCSharpVariableType(SourceTable.PrimaryKey.MemberColumns[0])%> t<%=GetMemberVariableName(SourceTable.PrimaryKey.MemberColumns[0])%>)
            {
                <%=GetClassName(SourceTable)%>Entity  temp=null;
                try
                {
                   temp=dal.Select<%=GetClassName(SourceTable)%>ByID( t<%=GetMemberVariableName(SourceTable.PrimaryKey.MemberColumns[0])%>);
                }
                catch (Exception e)
                {
                    throw new Exception(e.Message);
                } 
                return temp;
            }
            //外键查询,几个外键生成几个方法
            <%
            foreach(ColumnSchema column in SourceTable.ForeignKeyColumns)
            {%>
                 public static IList<<%=GetClassName(SourceTable)%>Entity> GetAll<%=GetClassName(SourceTable)%>By<%=column.Name%>(<%=GetCSharpVariableType(column)%> t<%=GetMemberVariableName(column)%>)
                 {
                    IList<<%=GetClassName(SourceTable)%>Entity> temp=null;
                       try
                    {
                       temp=dal.GetAll<%=GetClassName(SourceTable)%>By<%=column.Name%>( t<%=GetMemberVariableName(column)%>);
                    }
                    catch (Exception e)
                    {
                        throw new Exception(e.Message);
                    } 
                    return temp;
                 } 
            <%}
            %>
            //添加数据
            public  static int Insert<%=GetClassName(SourceTable)%>(<%=GetClassName(SourceTable)%>Entity T_<%=GetClassName(SourceTable)%>)
            {
                    int i=-1;
                    try
                    {
                       i=dal.Insert<%=GetClassName(SourceTable)%>(T_<%=GetClassName(SourceTable)%>);
                    }
                    catch (Exception e)
                    {
                        throw new Exception(e.Message);
                    } 
                    return i;
            }
            //修改数据
            public  static int Update<%=GetClassName(SourceTable)%>(<%=GetClassName(SourceTable)%>Entity T_<%=GetClassName(SourceTable)%>)
            {
                 int i=-1;
                    try
                    {
                       i=dal.Update<%=GetClassName(SourceTable)%>(T_<%=GetClassName(SourceTable)%>);
                    }
                    catch (Exception e)
                    {
                        throw new Exception(e.Message);
                    } 
                    return i;
            }
            //删除数据,主键,不考虑联合主键
            public  static int Delete<%=GetClassName(SourceTable)%>(<%=GetCSharpVariableType(SourceTable.PrimaryKey.MemberColumns[0])%> t<%=GetMemberVariableName(SourceTable.PrimaryKey.MemberColumns[0])%>)
            {
                    int i=-1;
                    try
                    {
                       i=dal.Delete<%=GetClassName(SourceTable)%>(t<%=GetMemberVariableName(SourceTable.PrimaryKey.MemberColumns[0])%>);
                    }
                    catch (Exception e)
                    {
                        throw new Exception(e.Message);
                    } 
                    return i;
            }
        }
    }
    ​
    <script runat="template">
    //自定义方法
    public string GetPascalMemberVariableName(ColumnSchema column)  
    {  
        string propertyName = GetPropertyName(column);  
        string memberVariableName = "_" + GetCamelCaseName(propertyName);  
          
        string temp= propertyName.Substring(0,1).ToUpper()+propertyName.Substring(1);  
        return temp;  
    } 
    public string GetColumns(TableSchema table)
    {
        string temp="";
        foreach(ColumnSchema column in table.Columns)
        {
            temp+="@"+GetPascalMemberVariableName(column)+",";
        }
        return temp.Substring(0,temp.Length-1);
    }
    ​
    public string GetUpdateColumns(TableSchema table)
    {
        string temp="";
        foreach(ColumnSchema column in table.NonPrimaryKeyColumns)
        {
            temp+=column.Name+"=@"+GetPascalMemberVariableName(column)+",";
        }
        temp=temp.Substring(0,temp.Length-1);
        //空格是Sql语句控制符
        temp+=" "+"where "+table.PrimaryKey.MemberColumns[0].Name+"="+"@"+GetPascalMemberVariableName(table.PrimaryKey.MemberColumns[0]);
        return temp;
    }
    ​
    //------end
    public string GetMemberVariableDeclarationStatement(ColumnSchema column)
    {
        return GetMemberVariableDeclarationStatement("private", column);
    }
    ​
    public string GetMemberVariableDeclarationStatement(string protectionLevel, ColumnSchema column)
    {
        string statement = protectionLevel + " ";
        statement += GetCSharpVariableType(column) + " " + GetMemberVariableName(column);
        
        string defaultValue = GetMemberVariableDefaultValue(column);
        if (defaultValue != "")
        {
            statement += " = " + defaultValue;
        }
        
        statement += ";";
        
        return statement;
    }
    ​
    public string GetReaderAssignmentStatement(ColumnSchema column, int index)
    {
        string statement = "if (!reader.IsDBNull(" + index.ToString() + ")) ";
        statement += GetMemberVariableName(column) + " = ";
        
        if (column.Name.EndsWith("TypeCode")) statement += "(" + column.Name + ")";
        
        statement += "reader." + GetReaderMethod(column) + "(" + index.ToString() + ");";
        
        return statement;
    }
    ​
    public string GetCamelCaseName(string value)
    {
        return value.Substring(0, 1).ToLower() + value.Substring(1);
    }
    ​
    public string GetMemberVariableName(ColumnSchema column)
    {
        string propertyName = GetPropertyName(column);
        string memberVariableName = "_" + GetCamelCaseName(propertyName);
        
        return memberVariableName;
    }
    ​
    public string GetPropertyName(ColumnSchema column)
    {
        string propertyName = column.Name;
        
        if (propertyName == column.Table.Name + "Name") return "Name";
        if (propertyName == column.Table.Name + "Description") return "Description";
        
        if (propertyName.EndsWith("TypeCode")) propertyName = propertyName.Substring(0, propertyName.Length - 4);
        
        return propertyName;
    }
            
    public string GetMemberVariableDefaultValue(ColumnSchema column)
    {
        switch (column.DataType)
        {
            case DbType.Guid:
            {
                return "Guid.Empty";
            }
            case DbType.AnsiString:
            case DbType.AnsiStringFixedLength:
            case DbType.String:
            case DbType.StringFixedLength:
            {
                return "String.Empty";
            }
            default:
            {
                return "";
            }
        }
    }
    ​
    public string GetCSharpVariableType(ColumnSchema column)
    {
        if (column.Name.EndsWith("TypeCode")) return column.Name;
    ​
        return DbTypeCSharp[column.DataType.ToString()];    
    }
    ​
    public string GetReaderMethod(ColumnSchema column)
    {
        return DbDataReader[column.DataType.ToString()];
    }
    ​
    public string GetClassName(TableSchema table)
    {
        if (table.Name.EndsWith("s"))
        {
            return table.Name.Substring(0, table.Name.Length - 1);
        }
        else
        {
            return table.Name;
        }
    }
    public string GetInterfaceName(TableSchema table)
    {
        string t="";
        if (table.Name.EndsWith("s"))
        {
            t= table.Name.Substring(0, table.Name.Length - 1);
        }
        else
        {
            t= table.Name;
        }
        return "I"+t[0].ToString().ToUpper()+t.Substring(1);
    }
    public string GetSqlDbType(ColumnSchema column)
    {
        return SqlNativeSqlDb[column.NativeType.ToString()];
    }
    ​
    public string GetPrimaryKeyType(TableSchema table)
    {
        if (table.PrimaryKey != null)
        {
            if (table.PrimaryKey.MemberColumns.Count == 1)
            {
                return GetCSharpVariableType(table.PrimaryKey.MemberColumns[0]);
            }
            else
            {
                throw new ApplicationException("This template will not work on primary keys with more than one member column.");
            }
        }
        else
        {
            throw new ApplicationException("This template will only work on tables with a primary key.");
        }
    }
    ​
    public override string GetFileName()
    {
        return this.GetClassName(this.SourceTable) + ".cs";
    }
    </script>

    生成以上类的工具类:

    生成的目标类 _mappingTemplate = CompileTemplate(CodeTemplateInfo.DirectoryName + "BLL.cst");

        private string _outputDirectory;//输出路径
    private DatabaseSchema _sourceDatabase;//数据库
    private CodeTemplate _mappingTemplate;//映射模版

    Tools类

    <%@ CodeTemplate Language="C#" TargetLanguage="C#" Description="This Template Generates C# domain objects for NHibernate" Debug="true" %>
    <%@ Property Name="ProjectName" Type="System.String" Default="Blog" Optional="False" Category="Strings" Description="This is Project Name"%>
    <%@ Assembly Name="SchemaExplorer" %>
    <%@ Import Namespace="SchemaExplorer" %>
    <%@ Import Namespace="System.IO" %>
    <%@ Import Namespace="System.Windows.Forms.Design" %><% this.generate();%><script runat="template">
        private string _outputDirectory;//输出路径
        private DatabaseSchema _sourceDatabase;//数据库
        private CodeTemplate _mappingTemplate;//映射模版
        
        [Editor(typeof(System.Windows.Forms.Design.FolderNameEditor), typeof(System.Drawing.Design.UITypeEditor))]
        [Category("Class")]
        [Description("The folder to save the generated class files.")]
        public string OutputDirectory
        {
            get {return _outputDirectory;}
            set {_outputDirectory= value;}
        }
        
        [Category("Database")]
        [Description("Database that the mapping file should be based on.")]
        public DatabaseSchema SourceDatabase {
            get { return _sourceDatabase; }
            set { _sourceDatabase = value; }
        }
        
        [Browsable(false)]
        public CodeTemplate MappingTemplate
        {
            get
            {
                if (_mappingTemplate == null)
                    _mappingTemplate = CompileTemplate(CodeTemplateInfo.DirectoryName + "BLL.cst");
    ​
                return _mappingTemplate;
            }   
        }
        
        
        public CodeTemplate CompileTemplate(string templateName)
        {
            CodeTemplateCompiler compiler = new CodeTemplateCompiler(templateName);
            compiler.Compile();
    ​
            if (compiler.Errors.Count == 0)
            {
                return compiler.CreateInstance();
            }
            else
            {
                for (int i = 0; i < compiler.Errors.Count; i++)
                {
                    Response.WriteLine(compiler.Errors[i].ToString());
                }
                return null;
            }
    ​
        }
        
        public string GetClassName(TableSchema table)
        {
            if (table.Name.EndsWith("s"))
            {
                return table.Name.Substring(0, table.Name.Length - 1);
            }
            else
            {
                return table.Name;
            }
        }
        
        public void generate()
        {
            foreach(TableSchema table in _sourceDatabase.Tables)
            {
                Response.WriteLine("generate "+table.Name+"...");   
                
                string classFileName = GetClassName(table);
                //interface
                //classFileName=classFileName[0].ToString().ToUpper()+classFileName.Substring(1);
                //classFileName ="I"+classFileName+ ".cs";
                //class 
                classFileName += ".cs";
                
                classFileName = Path.Combine(OutputDirectory, classFileName);
                
                this.MappingTemplate.SetProperty("SourceTable", table);
                this.MappingTemplate.SetProperty("ProjectName", ProjectName);
    ​
                this.MappingTemplate.RenderToFile(classFileName, true);
                
                Response.WriteLine("generate "+table.Name+"   Complete");   
            }
        }
    </script>
    
    
  • 相关阅读:
    大数据下高并发的处理详解
    【玩转TensorFlow】TensorFlow常见问题详解
    在阿里云上两分钟玩转AlextNet
    【前端精华】React源码分析系列
    svm
    神经网络结构选择
    神经网络反向传播跳出局部极小
    ubuntu16.04设置电池充电阈值
    pandas datafram重命名列名称
    centos6.8/ubuntu 安装python2.7 or python3.6
  • 原文地址:https://www.cnblogs.com/fenqinearl/p/11041650.html
Copyright © 2020-2023  润新知