zoukankan      html  css  js  c++  java
  • CodeSmith实战(一):生成实体层

    1.先建立一个生成单个表的实体的模板

    <%--
    Name:
    Author:
    Description:
    --%>
    <%@ CodeTemplate Language="C#" TargetLanguage="C#" Src="" Inherits="OutputFileCodeTemplate" Debug="False" Description="Template description here." %>
    <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema"  Category="Context"  Optional="True" Description="the table name"   %>
    <%@ Assembly Name="SchemaExplorer" %>
    <%@ Import Namespace="SchemaExplorer" %>
    <%@ Assembly Name="CodeSmith.BaseTemplates" %>
    <%@ Import Namespace="CodeSmith.BaseTemplates" %>
    <%@ Assembly Name="CodeSmith.CustomProperties" %>
    <%@ Import Namespace="CodeSmith.CustomProperties" %>
    namespace Jack.CodeSmith.Test
    {
          public class <%=this.SourceTable.Name%>Model
        {
            public <%=this.SourceTable.Name%>()
            {
              //ToDo:   
            }
            <%for(int i=0; i<this.SourceTable.NonPrimaryKeyColumns.Count;i++){%>
                private <%=GetCSharpVariableType(this.SourceTable.NonPrimaryKeyColumns[i])%> m<%=this.SourceTable.NonPrimaryKeyColumns[i].Name%>;
            <%}%>
            <%for(int i=0; i<this.SourceTable.NonPrimaryKeyColumns.Count;i++)
            {                  
                int namelength=this.SourceTable.NonPrimaryKeyColumns[i].Name.Length;
                string colName=this.SourceTable.NonPrimaryKeyColumns[i].Name;%>
                public  <%=GetCSharpVariableType(this.SourceTable.NonPrimaryKeyColumns[i])%> <%=colName.Substring(0,1).ToUpper()%><%=colName.Substring(1,colName.Length-1)%>
                get {return m<%=this.SourceTable.NonPrimaryKeyColumns[i].Name%>;}
                set {m<%=this.SourceTable.NonPrimaryKeyColumns[i].Name%>=value;}
            <%}%>       
        }   
    }

    <script runat="template">
    // Override the OutputFile property and assign our specific settings to it.
    [FileDialog(FileDialogType.Save, Title="Select Output File", Filter="C# Files (*.cs)|*.cs", DefaultExtension=".cs")]
    public override string OutputFile
    {
        get {return base.OutputFile;}
        set {base.OutputFile = value;}
    }
    </script>
    <script runat="template">
    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;
            }
        }
    }
    </script>

    下面是代码格式化后的截图

     

    11

    22

    33

    44

    55

    2. 再建立一个模板,调用刚才建立的子模板

    <%--
    Name:
    Author:
    Description:
    --%>

    <%@ CodeTemplate Language="C#" TargetLanguage="C#"  Inherits=""  Description="This is my first data temple" %>
    <%@ Property Name="SourceDatabase" Type="SchemaExplorer.DatabaseSchema" Category="" Description="Database containing the tables." %>
    <%@ Assembly Name="SchemaExplorer" %>
    <%@ Import Namespace="SchemaExplorer" %>
    <%@ Assembly Name="CodeSmith.BaseTemplates" %>
    <%@ Import Namespace="CodeSmith.BaseTemplates" %>
    <%@ Assembly Name="CodeSmith.CustomProperties" %>
    <%@ Import Namespace="CodeSmith.CustomProperties" %>
    <%@ Assembly Name="System.Design" %>
    <%@ Import Namespace=" System.Design" %>
    <%@ Register Name="SubTemplate" Template="C:\CodeSmithStudy\GenerateModel.cst" MergeProperties="True" ExcludeProperties="" %>
    <%
    for(int i=0; i<this.SourceDatabase.Tables.Count;i++)

         SubTemplate  mySub=new SubTemplate();
        mySub.OutputFile=this.OutputDirectory+@"\"+this.SourceDatabase.Tables[i].Name+"Model.cs";
        mySub.SourceTable=this.SourceDatabase.Tables[i];
        mySub.Render(Response);       
    }

    %>

    <script runat="template">
    private string _outputDirectory = @"c:\codesmithstudy";
    [Editor(typeof(System.Windows.Forms.Design.FolderNameEditor), typeof(System.Drawing.Design.UITypeEditor)),
    Category("Custom"), Description("Output directory.")]
    public string OutputDirectory
    {
           get {return _outputDirectory;}
           set {_outputDirectory= value;}
    }
    </script>

    格式化后的截图

    66

    77

    3. 从属性窗口选择要保存到的文件夹和数据库

    88

    4.运行,得到如下结果

    99

    101

    5. 模板下载

    https://files.cnblogs.com/cnblogsfans/template.rar

    扫码关注公众号,了解更多管理,见识,育儿等内容

    作者: 王德水
    出处:http://www.cnblogs.com/cnblogsfans
    版权:本文版权归作者所有,转载需经作者同意。

  • 相关阅读:
    Oracle 备份与恢复 15 个典型问题
    Oracle Rman 增量备份与差异备份
    Oracle top 查询TOP SQL
    Oracle 将另外一张表的列更新到本表的列
    Mysql Innodb 表碎片整理
    python Django 之 Model ORM inspectdb(数据库表反向生成)
    MySQL 5.6比较重要的参数,以及5.5到5.6默认值有过变化的参数
    Python Django 前后端数据交互 之 HttpRequest、HttpResponse、render、redirect
    HTML(一)基础
    Python Django 前后端数据交互 之 HTTP协议下GET与POST的区别
  • 原文地址:https://www.cnblogs.com/cnblogsfans/p/1066760.html
Copyright © 2011-2022 走看看