我的MyGeneration

本文介绍了一个基于C#的UI界面与代码模板生成器的实现细节。该实现包括了自定义GUI界面的创建及数据库表对应的实体类模板自动生成逻辑。通过选择不同的数据库,系统能够动态生成相应的实体类代码。

话不多说,直接上代码

Interface Code:

public class GeneratedGui : DotNetScriptGui
{
    public GeneratedGui(ZeusContext context) : base(context) {}

    //-----------------------------------------
    // The User Interface Entry Point
    //-----------------------------------------
    public override void Setup()
    {
        // ** UNCOMMENT CODE BELOW TO SEE UI **

        ui.Width  = 500;
        ui.Height = 200;
        GuiLabel lblDemo = ui.AddLabel("lblDemo", "Demo", "Demo Tooltip");
        GuiComboBox cbDb = ui.AddComboBox("cbDb","select the Database");
        cbDb.BindData(MyMeta.Databases);
        ui.ShowGui = true;
    }

}

Template Code:

<%
public class GeneratedTemplate : DotNetScriptTemplate
{
    public GeneratedTemplate(ZeusContext context) : base(context) {}

    //---------------------------------------------------
    // Render() is where you want to write your logic    
    //---------------------------------------------------
    public override void Render()
    {
        IDatabase db = MyMeta.Databases[input["cbDb"].ToString()];
        foreach(ITable tb in db.Tables)
        {
            OutModel(tb);
        }
    }
    
    public string Dtype(string dbType)
    {
        string dt = "";
        switch(dbType)
        {
            case "int":
                dt = "int";
                break;
            case "decimal":
                dt = "decimal";
                break;
            case "datetime":
                dt = "DateTime";
                break;
            case "float":
                dt = "decimal";
                break;
            default:
                dt = "string";
                break;
        }
        
        return dt;
    }

    public void OutModel(ITable tb)
    {
        output.clear();
        output.writeln("using System;");
        output.writeln("using System.Collections.Generic;");
        output.writeln("using System.Linq;");
        output.writeln("using System.Text;");
        output.writeln("");
        output.writeln("namespace Models.Entity");
        output.writeln("{");
        output.writeln("    public class " + tb.Name);
        output.writeln("    {");
        output.writeln("        public " + tb.Name + "()");
        output.writeln("        {");
        output.writeln("            ");
        output.writeln("        }");
        output.writeln("");
        
        foreach(IColumn c in tb.Columns)
        {
            output.writeln("        private " + Dtype(c.DataTypeName) + " _" + c.Name + ";");
            output.writeln("");
            output.writeln("        /// <summary>");
            output.writeln("        /// " + c.Description + "(" + c.DataTypeName + ")");
            output.writeln("        /// </summary>");
            output.writeln("        public " + Dtype(c.DataTypeName) + " " + c.Name);
            output.writeln("        {");
            output.writeln("            get { return _" + c.Name + "; }");
            output.writeln("            get { _" + c.Name + " = value; }");
            output.writeln("        }");
            output.writeln("");
        }
        
        output.writeln("    }");
        output.writeln("}");
        output.save("D:\\testModel\\"+tb.Name+".cs","o");
    }
}    
%>

 

转载于:https://www.cnblogs.com/wpcnblog/p/4378369.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值