制作符合平台的CodeSmith代码生产模版

先看生产的结果

///////////////////////////////////////////////////////////////////////////////////////
// File: StandardizationProcess .cs
// Description: Enter summary here after generation.
// ---------------------
// Copyright 谈勇 2015 Our Client
// ---------------------
// History
//    2015/11/26    谈勇    Original Version
///////////////////////////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MCS.Library.Core;
using MCS.Library.Data.Mapping;
using MCS.Library.Data.DataObjects;
using MCS.Library.SOA.DataObjects;
using MCS.Library.Data;
using MCS.Library.SOA.DataObjects.Workflow;
using MCS.Library.Data.Builder;
using SinoOcean.Seagull2.TransactionData.Implement;
namespace SinoOcean.Seagull2.Framework.MasterData.Implement
{
    /// <summary>
    /// 表示
    /// </summary>
    [Serializable]
    [XElementSerializable]
    [ORTableMapping("Implement.StandardizationProcess_Acceptance")]
    public class StandardizationProcess
    {
        /// <summary>
        /// 获取或设置 编码
        /// </summary>
        [ORFieldMapping("Code", PrimaryKey = true)]
        [XmlObjectMapping]
        public string Code { get; set; }

        /// <summary>
        /// 获取或设置 标准化工艺编码
        /// </summary>
        [ORFieldMapping("StandardizationProcessCode")]
        [XmlObjectMapping]
        public string StandardizationProcessCode { get; set; }

        /// <summary>
        /// 获取或设置 标准化工艺名称
        /// </summary>
        [ORFieldMapping("StandardizationProcessName")]
        [XmlObjectMapping]
        public string StandardizationProcessName { get; set; }

        /// <summary>
        /// 获取或设置 计划管理时间
        /// </summary>
        [ORFieldMapping("PlanCompleteTime")]
        [XmlObjectMapping]
        public DateTime PlanCompleteTime { get; set; }

        /// <summary>
        /// 获取或设置 实际完成时间
        /// </summary>
        [ORFieldMapping("ActualCompleteTime")]
        [XmlObjectMapping]
        public DateTime ActualCompleteTime { get; set; }

        /// <summary>
        /// 获取或设置 备注
        /// </summary>
        [ORFieldMapping("Remark")]
        [XmlObjectMapping]
        public string Remark { get; set; }

        /// <summary>
        /// 获取或设置 创建时间
        /// </summary>
        [ORFieldMapping("CreateTime")]
        [XmlObjectMapping]
        public DateTime CreateTime { get; set; }

        /// <summary>
        /// 获取或设置 创建人
        /// </summary>
        [ORFieldMapping("Creator")]
        [XmlObjectMapping]
        public string Creator { get; set; }

        /// <summary>
        /// 获取或设置 流程编码
        /// </summary>
        [ORFieldMapping("ResourceID")]
        [XmlObjectMapping]
        public string ResourceID { get; set; }

        /// <summary>
        /// 获取或设置 标段编码
        /// </summary>
        [ORFieldMapping("TendersCode")]
        [XmlObjectMapping]
        public string TendersCode { get; set; }

        /// <summary>
        /// 获取或设置 标段名称
        /// </summary>
        [ORFieldMapping("TendersName")]
        [XmlObjectMapping]
        public string TendersName { get; set; }

    }

    /// <summary>
    /// 表示<see cref="StandardizationProcess"/>的集合
    /// </summary>
    [Serializable]
    public class StandardizationProcessCollection : EditableDataObjectCollectionBase<StandardizationProcess>
    {
    }

    /// <summary>
    /// 表示<see cref="StandardizationProcess"/>的数据适配器
    /// </summary>
    [Serializable]
    public class StandardizationProcessAdapter : UpdatableAndLoadableAdapterBase<StandardizationProcess, StandardizationProcessCollection>
    {
        /// <summary>
        /// 表示<see cref="StandardizationProcessAdapter"/> 的实例,此字段为只读。
        /// </summary>
        public static readonly StandardizationProcessAdapter Instance = new StandardizationProcessAdapter();

        /// <summary>
        /// 载入所有 <see cref="StandardizationProcess"/>。
        /// </summary>
        /// <returns>一个<see cref="StandardizationProcessCollection"/>,包含所查询的对象。</returns>
        public StandardizationProcessCollection LoadAll()
        {
            WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();

            return this.LoadByBuilder(where);
        }

        /// <summary>
        /// 根据 编码 载入 <see cref="StandardizationProcess"/>。
        /// </summary>
        /// <param name="code">编码</param>
        /// <returns>一个<see cref="StandardizationProcess"/>或<see langword="null"/>。</returns>
        public StandardizationProcess Load(string code)
        {
            WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
            where.AppendItem("Code", code);
            return this.LoadByBuilder(where).FirstOrDefault();
        }

        /// <summary>
        /// 根据一组 编码 载入 <see cref="StandardizationProcessCollection"/>。
        /// </summary>
        /// <param name="codes">编码</param>
        /// <returns>一个<see cref="StandardizationProcessCollection"/>,包含所查询的对象。</returns>
        public StandardizationProcessCollection LoadRange(params string[] codes)
        {
            if (codes == null)
                throw new ArgumentNullException("codes");

            if (codes.Length > 0)
            {
                InSqlClauseBuilder inSql = new InSqlClauseBuilder("Code");
                inSql.AppendItem(codes);
                return this.LoadByBuilder(inSql);
            }
            else
            {
                return new StandardizationProcessCollection();
            }
        }

        /// <summary>
        /// 在派生类中重写时,获取数据库连接的配置名称。
        /// </summary>
        protected override string GetConnectionName()
        {
            return DatabaseUtil.TRAN_CONNECTION_STR;
        }
    }

}

调用:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace SinoOcean.Seagull2.Implement.ModalDialog
{
    public partial class WebFormTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            this.Gridview1.DataSource =  SinoOcean.Seagull2.Framework.MasterData.Implement.StandardizationProcessAdapter.Instance.LoadAll();
            this.Gridview1.DataBind();
        }
    }
}

显示效果

CodeSmith 模板代码

<%--
Name:平台项目代码生成
Author: 谈勇
Description: 根据指定的数据库表生成访问层类和实体类模板
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="C#" Src="" Inherits="" Debug="True"  Description="sql map" ResponseEncoding="utf-8" %>
<%@ Property Name="ClassBaseTypeName" Type="String" Category="Base Type Name" Default="WorkflowObjectBase" Description="是否要继承此接口" %>

<%@ Property Name="Namespace" Type="System.String" Default="StepByStep.DataObjects" Optional="True" Category="ClassInfo" Description="数据对象的名称空间" %>
<%@ Property Name="DataEntityName" Type="System.String" Default="" Optional="False" Category="ClassInfo" Description="数据实体的类名" %>
<%@ Property Name="DataEntityCollectionName" Type="System.String" Default="" Optional="True" Category="ClassInfo" Description="类名的数据实体集合" %>
<%@ Property Name="DataAdapterName" Type="System.String" Default="" Optional="True" Category="ClassInfo" Description="类名的数据适配器" %>
<%@ Property Name="Loadable" Type="System.Boolean" Default="True" Optional="True" Category="ClassInfo" Description="数据适配器支持加载数据吗?" %>
<%@ Property Name="GenerateLoadByIDS" Type="System.Boolean" Default="True" Optional="True" Category="ClassInfo" Description="数据适配器支持加载数据吗?" %>

<%@ Property Name="ClassName" Type="String" Category="Context" Optional="False" Description="数据对象类名" %>
<%@ Property Name="CollectionClassName" Type="String" Category="Context" Optional="True" Description="数据收集的类名" %>
<%@ Property Name="DB" Type="SchemaExplorer.DatabaseSchema" Category="Context" Description="选择要生产的数据库" %>
<%@ Property Name="TableName" Type="String" Category="Context" Description="设置你要生产的表" %>

<%@ Property Name="DevelopersName" Type="String" Default="谈勇" Category="个人信息设置"  Description="开发人员姓名" %>

<%@ Property Name="GenerateCollection" Type="Boolean" Default="True" Category="输出操作设置" Description="是否生产集合" %>
<%@ Property Name="Xml" Type="Boolean" Default="False"  Category="输出操作设置"  Description="是否与xml关联" %>

<%@ Property Name="ConnectionName" Type="System.String" Default="" Optional="True" Category="Data" Description="Data connection name" %>
<%@ Property Name="ConnectionNameIsExpression" Type="System.Boolean" Default="True" Optional="True" Category="Data" Description="Determin whether Data connection name is an expression" %>
<%@ Property Name="Table" Type="SchemaExplorer.TableSchema" Default="" Optional="False" Category="Data" Description="" OnChanged="" Editor="" EditorBase="" Serializer="" %>

<%@ Assembly Name="SchemaExplorer" %>
<%@ Assembly Name="System.Core" %>
<%@ Assembly Src="CodesmithUtils.cs" %>

<%@ Import Namespace="SchemaExplorer" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="Codesmith.Common" %>

///////////////////////////////////////////////////////////////////////////////////////
// File: <%=ClassName%> .cs
// Description: Enter summary here after generation.
// ---------------------
// Copyright <%= DevelopersName%> <%= DateTime.Now.Year %> Our Client
// ---------------------
// History
//    <%= DateTime.Now.ToShortDateString() %>    <%= DevelopersName%>    Original Version
///////////////////////////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MCS.Library.Core;
using MCS.Library.Data.Mapping;
using MCS.Library.Data.DataObjects;
using MCS.Library.SOA.DataObjects;
using MCS.Library.Data;
using MCS.Library.SOA.DataObjects.Workflow;
using MCS.Library.Data.Builder;
<%
SchemaExplorer.ColumnSchema[] pks = GetPrimaryKeys();
%>
namespace <%=Namespace%>
{
    /// <summary>
    /// 表示 <%=DB.Tables[TableName].Description ?? TableName %>
    /// </summary>
    [Serializable]
    [XElementSerializable]
    [ORTableMapping("<%=DB.Tables[TableName].FullName %>")]
    public class <%=ClassName%> <%= string.IsNullOrEmpty(ClassBaseTypeName)?string.Empty : " : " + ClassBaseTypeName  %>
    {
    <% string pkString = ""; %>
    <%foreach(ColumnSchema col in DB.Tables[TableName].Columns){%>
        <%
            if(col.IsPrimaryKeyMember){
                pkString = ", PrimaryKey = true";
            }
            else
            {
                pkString ="";
            }
        %>
        <% if(Xml){ %>
        /// <summary>
        /// 获取或设置 <%=col.Description%>
        /// </summary>
        [ORFieldMapping("<%=col.Name%>" <%=pkString%>)]
        [XmlObjectMapping]
        public <%=CSharpUtils.GetCSharpVariableType(col.DataType)%> <%= CSharpUtils.ChangeDbFieldToCSharpProperty(col.Name)%> { get; set;}

        <%}else{ %>
        /// <summary>
        /// 获取或设置 <%=col.Description%>
        /// </summary>
        [ORFieldMapping("<%=col.Name%>" <%=pkString%>)]
        public <%=CSharpUtils.GetCSharpVariableType(col.DataType)%> <%= CSharpUtils.ChangeDbFieldToCSharpProperty(col.Name)%> { get; set;}
        <%} %>

    <%}%>
    }
    <%if (GenerateCollection) {%>

    /// <summary>
    /// 表示<see cref="<%=ClassName%>"/>的集合
    /// </summary>
    [Serializable]
    public class <%=GetCollectionClassName2()%> : EditableDataObjectCollectionBase<<%=ClassName%>>
    {
    }
    <%}%>

        /// <summary>
    /// 表示<see cref="<%=DataEntityName %>"/>的数据适配器
    /// </summary>
    public class <%=GetAdapterClassName()%> : <%if (Loadable){%>UpdatableAndLoadableAdapterBase<<%=DataEntityName%>, <%=GetCollectionClassName()%>><%} else {%>UpdatableAdapterBase<<%=DataEntityName%>><%}%>
    {
        /// <summary>
        /// 表示<see cref="<%=GetAdapterClassName()%>"/> 的实例,此字段为只读。
        /// </summary>
        public static readonly <%=GetAdapterClassName()%> Instance = new <%=GetAdapterClassName()%>();

        private <%=GetAdapterClassName()%>()
        {
        }

        /// <summary>
        /// 载入所有 <see cref="<%=DataEntityName%>"/>。
        /// </summary>
        /// <returns>一个<see cref="<%=DataEntityCollectionName%>"/>,包含所查询的对象。</returns>
        public <%=DataEntityCollectionName%> LoadAll()
        {
            WhereSqlClauseBuilder where = new WhereSqlClauseBuilder ();

            return this.LoadByBuilder(where);
        }

        <%if (GenerateLoadByIDS && pks.Length>0){%>
        /// <summary>
        /// 根据 <%=string.Join(",",GetPrimaryKeysDescriptions()) %> 载入 <see cref="<%=DataEntityName%>"/>。
        /// </summary>
        <%for(int i=0;i<pks.Length;i++){%>
        /// <param name="<%=StringUtil.ToCamelCase(pks[i].Name)%>"><%=pks[i].Description%></param>
        <%}%>
        /// <returns>一个<see cref="<%=DataEntityName%>"/>或<see langword="null"/>。</returns>
        public <%=DataEntityName %> Load(<%= string.Join(",",GetPrimaryKeysForParameters()) %>)
        {
            WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
            <%for(int i=0;i<pks.Length;i++){ %>
            where.AppendItem("<%=pks[i].Name%>",<%=StringUtil.ToCamelCase(pks[i].Name)%>);
            <%}%>
            return this.LoadByBuilder(where).FirstOrDefault();
        }
        <%if(pks.Length==1){%>

        /// <summary>
        /// 根据一组 <%=pks[0].Description %> 载入 <see cref="<%=DataEntityCollectionName%>"/>。
        /// </summary>
        /// <param name="<%=StringUtil.ToPlural(StringUtil.ToCamelCase(pks[0].Name))%>"><%=pks[0].Description%></param>
        /// <returns>一个<see cref="<%=DataEntityCollectionName%>"/>,包含所查询的对象。</returns>
        public <%=DataEntityCollectionName%> LoadRange(params <%=CSharpUtils.GetCSharpVariableType(pks[0].DataType)%>[] <%=StringUtil.ToPlural(StringUtil.ToCamelCase(pks[0].Name))%>)
        {
            if(<%=StringUtil.ToPlural(StringUtil.ToCamelCase(pks[0].Name))%> == null)
                throw new ArgumentNullException("<%=StringUtil.ToPlural(StringUtil.ToCamelCase(pks[0].Name))%>");

            if(<%=StringUtil.ToPlural(StringUtil.ToCamelCase(pks[0].Name))%>.Length>0){
                InSqlClauseBuilder inSql = new InSqlClauseBuilder("<%=pks[0].Name%>");
                inSql.AppendItem(<%=StringUtil.ToPlural(StringUtil.ToCamelCase(pks[0].Name))%>);
                return this.LoadByBuilder(inSql);
            }else{
                return new <%=DataEntityCollectionName%>();
            }
        }
        <%}%>
        <%if(pks.Length>1){
        for(int i=0;i<pks.Length;i++){
        %>

        /// <summary>
        /// 根据 <%=pks[i].Description %> 载入 <see cref="<%=DataEntityCollectionName%>"/>。
        /// </summary>
        /// <param name="<%=StringUtil.ToCamelCase(pks[i].Name)%>"><%=pks[i].Description%></param>
        /// <returns>一个<see cref="<%=DataEntityCollectionName%>"/>,包含所查询的对象。</returns>
        public <%=DataEntityCollectionName%> LoadBy<%=StringUtil.ToPascalCase(pks[i].Name)%>(<%=CSharpUtils.GetCSharpVariableType(pks[i].DataType)%> <%=StringUtil.ToCamelCase(pks[i].Name)%>)
        {
            WhereSqlClauseBuilder where = new WhereSqlClauseBuilder ();
            where.AppendItem("<%=pks[i].Name%>",<%=StringUtil.ToCamelCase(pks[i].Name)%>);
            return this.LoadByBuilder(where);
        }
        <%}} //endfor,if%>
        <%}%>
        <%if (GetConnectionName() != null) {%>

        /// <summary>
        /// 在派生类中重写时,获取数据库连接的配置名称。
        /// </summary>
        protected override string GetConnectionName()
        {
        <%if(ConnectionNameIsExpression){%>
            return <%=ConnectionName%>;
        <%} else {%>
            return "<%=ConnectionName%>";
        <%}%>
        }
        <%}%>
    }

}

<script runat="template">

    public string GetCollectionClassName2()
    {
        string result = CollectionClassName;

        if (result == null || result == "")
            result = ClassName + "Collection";

        return result;
    }

    #region adpater
        public string GetConnectionName()
    {
        string result = ConnectionName;

        if (result == null || result == "")
            result = null;

        return result;
    }

    public string GetAdapterClassName()
    {
        string result = DataAdapterName;

        if (result == null || result == "")
            result = DataEntityName + "Adapter";

        return result;
    }

    public string GetCollectionClassName()
    {
        string result = DataEntityCollectionName;

        if (result == null || result == "")
            result = DataEntityName + "Collection";

        return result;
    }

    public SchemaExplorer.ColumnSchema [] GetPrimaryKeys(){
        System.Collections.Generic.List<SchemaExplorer.ColumnSchema> result = new System.Collections.Generic.List<SchemaExplorer.ColumnSchema>();
        foreach(SchemaExplorer.ColumnSchema col in Table.Columns){
            if(col.IsPrimaryKeyMember){
                result.Add(col);
            }
        }
        return result.ToArray();
    }

    public string[] GetPrimaryKeysForParameters(){
        System.Collections.Generic.List<string> result = new System.Collections.Generic.List<string>();
        foreach(SchemaExplorer.ColumnSchema col in Table.Columns){
            if(col.IsPrimaryKeyMember){
                result.Add(CSharpUtils.GetCSharpVariableType(col.DataType) + " "  + StringUtil.ToCamelCase(col.Name));
            }
        }

        return result.ToArray();
    }

    public string[] GetPrimaryKeysDescriptions(){
        System.Collections.Generic.List<string> result = new System.Collections.Generic.List<string>();
        foreach(SchemaExplorer.ColumnSchema col in Table.Columns){
            if(col.IsPrimaryKeyMember){
                result.Add(StringUtil.ToCamelCase(col.Description));
            }
        }

        return result.ToArray();
    }
    #endregion
</script>

CodeSmith 属性设置

模版代码下载

CodeSmith6.5.0下载地址

时间: 2024-10-15 23:11:50

制作符合平台的CodeSmith代码生产模版的相关文章

Zabbix监控平台(三)生产环境案例

Zabbix监控平台(三)生产环境案例 一,Zabbix生产环境监测案例概述 1.1 项目规划 1.2 SNMP监控流程 1.3 IPMI 1.4 JMX(使用Zabbix Java Gateway代理) 1.5 实战监控Nginx,Apache,MySQL,PHP-fpm 1.6 Zabbix的Web监测 二,Zabbix监控MySQL数据库操作实战 2.1 编写监控脚本 2.2 在zabbix-agent端创建自定义键值配置文件 2.3 在zabbix-server端测试键值 2.4 在za

C#WPF 语音开发教程 源代码下载 csdn tts(text to sound) 一步一步 教你制作语音软件 附图和源代码

C#WPF  语音开发教程  一步一步 教你制作语音软件 附图和源代码 效果展示 一 项目准备 1.vs2012开发平台 2.微软的语音软件库 下载:http://download.csdn.net/detail/wyx100/8431269 (含实例项目源代码) 二.开发目标 制作一个语音软件,可以朗读文字: 多个语音库:男音和女音.支持英文和中文朗读: 支持选择播放设备 支持朗读语速选择 支持音量选择 三 开发过程 1.新建WpfSpeechDemo工程 文件(vs开发平台左上角)----新

CSS制作横向导航菜单实例代码

CSS制作横向导航菜单实例代码:横向导航菜单是div css布局中最为基础的且必须要掌握额技能,对于稍有布局经验的朋友这都不是问题,但是对于初学者可能未必如此,所以这里分享一段最为基础的布局代码,希望能够给需要的朋友带来帮助.代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="ht

怎么使用瓦特平台下面的“代码工厂”快速生成BS程序代码

这里说一下怎么使用瓦特平台下面的“代码工厂”快速生成程序代码 使用平台:windows+"visual studio 2010"+"SqlServer2000+" 结构:B/S 生成的结构:前端Html和JS.数据库sql,底层ajax,底层数据交互! 免费下载客户端:(永久有效)----------此版本不附带权限控制! http://pan.baidu.com/s/1hqtGGlA 代码生成介绍 1:打开瓦特平台的设计器: 点击提交:出现---> 在你的机

css+jQuery制作的文字循环滚动代码

css+jQuery制作的文字循环滚动代码,尺寸只需要在css中调整即可,另外别忘记在function里面修改相关参数 百度网盘下载

分享到微信微博空间等第三方平台的JS代码

分享功能有利于传播更多优质的内容,所以在web项目中也是比较常用的.今天就抽空整理下常用的分享平台的JS代码.这些代码可以在对应平台的官方网站上生成,官网上对分享内容的参数也有详尽说明.这里只对常用的几个参数说明下,案例未做兼容性处理,建议在chrome下预览. 1.分享到微信,易信 分享到微信,易信比较简单,贴上分享链接的二维码就可以了. 二维码生成地址:http://cli.im/ (网上随便搜的) 2.分享到新浪微博 代码如下: var _shareUrl = 'http://v.t.si

使用平台通道编写平台特定的代码

使用平台通道编写平台特定的代码 本指南介绍如何编写自定义平台特定的代码.一些平台特定的功能可通过现有软件包获得; 请参阅使用 packages. 框架概述: 平台通道 平台通道数据类型支持和解码器 示例: 使用平台通道调用iOS和Android代码 Step 1: 创建一个新的应用程序项目 Step 2: 创建Flutter平台客户端 Step 3a: 使用Java添加Android平台特定的实现 Step 3b: 使用Kotlin添加Android平台特定的实现 Step 4a: 使用Obje

智能工厂管控平台促进纳恩博生产升级与管理创新

摘要:对制造企业来说,在生产和工厂侧,它以规模化.标准化.自动化为基础,但它还需被赋予柔性化.定制化.可视化.低碳化的新特性:在商业模式侧,会出现颠覆性的变化--生产者影响消费者的模式被消费者需求决定产品生产的模式取而代之.智能工厂请添加链接描述是一次深刻的升级,会让研发.生产.产品.渠道.销售.客户管理等一整条生态链为之发生剧变.对制造企业来说,在生产和工厂侧,它以规模化.标准化.自动化为基础,但它还需被赋予柔性化.定制化.可视化.低碳化的新特性:在商业模式侧,会出现颠覆性的变化--生产者影响

在Mac版本下的IDEA中设置代码注释模版

在使用IDEA开发的过程中,我们可以通过设置代码注释模版,实现注释信息的自动补齐,提高编码效率.我使用的是Mac电脑,就以Mac环境来进行说明吧. 在Mac上配置IDEA的代码注释模版,主要包括两个部分:一个是File Head文件头注释,用于描述类文件的信息:一个是方法头注释,用于描述类方法的信息.具体配置过程如下. 一.配置类文件头注释模版点击IDEA编译器左上角的"IntelliJ IDEA"按钮,选择"Preferences...",在弹出窗口中,选择&qu