zoukankan      html  css  js  c++  java
  • 如何为Kalman Studio编写T4模板

      昨天刚发布了Kalman Studio代码生成器,有人说T4模板不大会编写,其实很简单,会C#语法就会编写,我这里简单的介绍一下

    首先,打开Visual Studio,新建一个文本文件,将扩展名改为"tt"

    这时Visual Studio会为Entity.tt生成一个对应的类文件Entity.cs,这时因为Visual Studio内置了一个代码生成工具TextTemplatingFileGenerator,会自动为每个模板文件生成对应的类文件,如果你在Entity.tt中编辑好模板,然后打开Entity.cs,TextTemplatingFileGenerator会自动解析模板,将代码输出到文件Entity.cs


    我们这里不需要使用TextTemplatingFileGenerator生成代码,把属性面板,自定义工具里面的文字TextTemplatingFileGenerator删掉,对应的类文件会自动删除;然后可以开始编写模板了,我这里先展示一个编写好的实体模板,然后再详细说明

    代码
    <#@ template language="C#v3.5" hostSpecific="true" debug="true" #>
    <#@ output extension=".cs" #>
    <
        TableHost host 
    = (TableHost)(Host); 
        SOTable table 
    = host.Table;
        List
    <SOColumn> list = host.ColumnList;
        
    string columnPrefix = host.GetString("ColumnPrefix");
        
    int prefixLevel = host.GetInt32("PrefixLevel");
        
    string nameSpace = host.GetString("NameSpace");
        
    string className = host.GetString("ClassName");
        
    if(string.IsNullOrEmpty(nameSpace))nameSpace = "Entity";
        
    if(string.IsNullOrEmpty(className))className = table.Name;
    #
    >
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;

    namespace <#= nameSpace #>
    {
        
    /// <summary>
        
    /// <#= table.Comment == "" ? table.Name : table.Comment #>
        
    /// </summary>
        [Serializable]
        
    public partial class <#= className #>
        {
            
    <foreach (SOColumn c in list)
            { #
    >/// <summary>
            
    /// <#= c.Comment == "" ? c.Name : c.Comment #>
            
    /// </summary>
            public <#= TypeUtil.DbType2TypeString(c.DataType) #> <#= StringUtil.RemovePrefix(c.Name, columnPrefix, prefixLevel).Replace(" """) #> { getset; }
            
            
    <# } #>
            
        }
    }

    现在我为大家简单介绍一下T4模板语法

    <#@ template language="C#v3.5" hostSpecific="true" debug="true" #>
    这里可以指定模板使用的语言,hostSpecific="true"表示是否使用特定的host(Kalman Studio里面使用的是TableHost对象,必须实现接口ITextTemplatingEngineHost)

    <#@ output extension=".cs" #>  指定生成文件的扩展名

    <#@ assembly name="System.Data" #>
    添加程序集引用,如果要使用第三方程序集,那么最好在项目中添加引用,或者加入到GAC

    <#@ import namespace="System.Data" #>
    导入要使用的命名空间,注意:这里的命名空间必须要在前面指定的程序集里面找得到的,比如我指定命名空间"System.Data","System.Data.Common",这些在程序集System.Data中都有的

    <#@ include file="test.tt" #> 导入模板,类似Html的include用法

    <#   #>  定义代码块

    <#= #>  定义表达式

    <#+ #>  定义变量

    我觉得讲了这些大家应该可以很轻松的编写T4模板了,下次再为大家讲解如何实现一个自定义的TextTemplatingEngineHost来生成代码

  • 相关阅读:
    org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException
    Mybatis分页插件PageHelper使用
    比特大陆发布终端 AI 芯片 端云联手聚焦安防
    大数据相乘
    MyBatis学习 之 二、SQL语句映射文件(1)resultMap
    MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql
    MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql
    MyBatis学习 之 四、MyBatis配置文件
    MyBatis学习 之 四、MyBatis配置文件
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/lingyun_k/p/1730909.html
Copyright © 2011-2022 走看看