zoukankan      html  css  js  c++  java
  • 使用CodeSmith 生成代码

    CodeSmith是一款优秀的代码生成工具。在ORM中,它能帮助我们生成实体类、XML配置文件,从而简化了我们一部分的开发工作。下面简要说说它的基本用法。

    1、  打开CodeSmith,创建一个模板

    File->New->CSharp Template 。创建的模板内容如下图

    模板中SampleStringProperty 和 SampleBooleanProperty都是声明的变量,在下边代码中都可以用到该变量,我们可以把该模板看做是一个HTML页面,没有用标签圈起来的代码和用<%= %>内部的代码都可以输出到界面上。其中<%= %>与aspx页面中的用法一致。

    2、编译代码,给声明的变量赋值

    点击红色方框圈住的按钮即可编译模板,模板编译通过后右侧会出现一个Properties的框,在这里面我们可以给我们在模板中定义的变量赋值,如下图所示。

    3、运行模板

    4、根据数据库生成对应实体层的代码

    1、连接数据库

    我们创建一个localhost的数据库连接,方法如下图

    2、新建一个Entity.cst模板,编写如下模板代码

    <%@ CodeTemplate Language="C#" TargetLanguage="C#" ResponseEncoding="UTF-8" Debug="False" Description="生成数据库实体" %>
    <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="属性" Description="要生成实体的数据表" %>
    <%@ Property Name="NameSpace" Type="System.String" Optional="False" Default="Modul" Category="属性" Description="实体类所在的命名空间" %>
    
    <%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %>
    <%@ Assembly Name="SchemaExplorer" %>
    <%@ Import Namespace="SchemaExplorer" %>
    
    <%--*本代码由代码生成器自动生成,请不要更改此文件的任何代码。
    *生成时间:<%= DateTime.Now.ToLocalTime() %>
    *生成者:<%= opuser %>--%>
    using System;
    namespace <%= this.NameSpace+".Entity.Entities" %>
    {
        ///<summary>
        ///<%= this.SourceTable.Name %>的实体类
        ///</summary>
        public class <%= this.SourceTable.Name %>
        {
            <% foreach(ColumnSchema column in this.SourceTable.Columns){%>    
             <%--生成get set 方法--%>
            /// <summary>
            /// <%= string.IsNullOrEmpty(column.Description)?StringUtil.ToCamelCase(column.Name):column.Description  %>
            /// </summary>
            public virtual <%= CSharpAlias[column.SystemType.FullName] %> <%= StringUtil.ToPascalCase(column.Name) %>
            {
                get;set;
            }
            
            <%}%>
        }
    }

    在该模板中我们定义了两个变量:SourceTable--该变量存储需要生成的数据库表,NameSpace--生成的代码中对应的命名空间。

    3、编译代码,在属性窗口中给SourceTable和NameSpace变量赋值,如下图

    4、点击运行即可看到生成的代码。

    5、生成的代码存储到指定的文件夹

    1、添加一个Main.cst模板,并编写如下代码。

    Main.cst与Entity.cst在同一个目录下。代码中有比较全的注释,可以仔细看一下。

    <%-- 
    Name:
    Author: 
    Description: 
    --%>
    <%@ Template Language="C#" TargetLanguage="Text" %>
    
    <%-- 注册实体层Entity模板 --%>
    <%@ Register Name="EntityTemplate" Template="Entity.cst" MergeProperties="False" %>
    
    
    <%@ Property Name="SourceDatabase" Type="SchemaExplorer.DatabaseSchema" DeepLoad="True" Optional="False" Description="存数数据库" %>
    <%@ Property Name="NameSpace" Type="System.String" Default="BitCar.Finance.CC" Optional="False" Description="命名空间" %>
    
    <%
    //创建实体层Entity类
    this.GenerateEntityClasses();
    
    Debug.WriteLine("OK");
    %>
    
    <script runat="template">
    //生成实体Entity类
    private void GenerateEntityClasses()
    {
        CodeTemplate Template =new EntityTemplate();//实体
        //循环数据数据库中的表
        foreach(TableSchema table in this.SourceDatabase.Tables)
        {
            string FileDirectory = OutputDirectory +"\Mode\Entities\"+ table.Name +".cs";
            //给Entity.cst模板中的变量SourceTable 赋值
            Template.SetProperty("SourceTable",table);
            //给Entity.cst模板中的变量NameSpace 赋值
             Template.SetProperty("NameSpace",NameSpace);
            //文件输出
            Template.RenderToFile(FileDirectory,true);
            Debug.WriteLine(FileDirectory +" 创建成功.");
        }
    }
    
    </script>
    
    <script runat="template">
    //代码模板输出路径,编译后可以在属性窗口中选择
    private string Directory = String.Empty;
    
    [Editor(typeof(System.Windows.Forms.Design.FolderNameEditor), typeof(System.Drawing.Design.UITypeEditor))] 
    [Optional, NotChecked]
    [DefaultValue("")]
    public string OutputDirectory 
    { 
    get
    {
    return Directory;
    }
    set
    {
    if (value.EndsWith("\")) value = value.Substring(0, value.Length -1);
    Directory = value;
    } 
    }
    </script>
    <%="全部生成成功" %>

    该模板中定义了三个变量:Namespace--指定生成的代码的命名空间,SourceDatabase--存储数据库,Directory--指定生成代码存储的路径(该变量在模板底部定义)

    2、编译模板,在属性窗口中给变量赋值,然后生成即可看到生成的代码。

     

    原文参考:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html

  • 相关阅读:
    [置顶] windows player,wzplayerV2 for windows
    wzplayer 近期将会支持BlackBerry和WinPhone8
    wzplayerEx for android(真正硬解接口,支持加密的 player)
    ffmpeg for ios 交叉编译 (支持i686 armv7 armv7s) 包含lame支持
    ffmpeg for ios 交叉编译 (支持i686 armv7 armv7s) 包含lame支持
    编译cegcc 0.59.1
    wzplayer 近期将会支持BlackBerry和WinPhone8
    wzplayerEx for android(真正硬解接口,支持加密的 player)
    windows player,wzplayerV2 for windows(20140416)更新
    编译cegcc 0.59.1
  • 原文地址:https://www.cnblogs.com/lc-chenlong/p/4191725.html
Copyright © 2011-2022 走看看