在很多场景下,我们都需要代码生成。你可以使用CodeSmith,不过它是商业软件。VisualStudio2008中自带也有代码生成功能。那就是T4 (Text Template Transformation Toolkit)模板。最近写了个简单Entity模板,直接看内容,连接Northwind database 生成所有Table的Entity:

   1:  <#@ template language="C#" hostspecific="true" #>
   2:  <#@ output extension="cs" #>
   3:  <#@ assembly name="Microsoft.SqlServer.ConnectionInfo" #>
   4:  <#@ assembly name="Microsoft.SqlServer.Smo" #>
   5:  <#@ assembly name="Microsoft.SqlServer.Management.Sdk.Sfc" #>
   6:  <#@ import namespace="Microsoft.SqlServer.Management.Smo" #>
   7:  <#
   8:      // Config variables
   9:      string serverName = "USER\\SQLEXPRESS2008";
  10:      string dbName = "NORTHWND";
  11:  #>
  12:  using System;
  13:   
  14:  /// Right click .tt file "Run Custom Tool" to update partial model.
  15:  /// Author Petter Liu  http://wintersun.cnblogs.com
  16:  namespace MyApp.CommonEntity
  17:  {
  18:  <#  
  19:      // Iterate over tables and generate procs
  20:      Server server = new Server(new Microsoft.SqlServer.Management.Common.ServerConnection(serverName, "sa", "sa"));
  21:      Database database = new Database(server, dbName);
  22:      database.Refresh(); 
  23:   
  24:      foreach (Table table in database.Tables)
  25:      {
  26:   #>
  27:       /// <summary>
  28:       /// <#= table.Name #> Entity
  29:       /// </summary>
  30:       public partial class <#= table.Name #>  
  31:       {
  32:   <#     
  33:          table.Refresh();
  34:          string columnCsharptype="";
  35:          string dbtypeStr="";
  36:          foreach (Column column in table.Columns)
  37:          {
  38:            dbtypeStr=column.DataType.ToString();
  39:            if (dbtypeStr=="nvarchar" || dbtypeStr=="nchar")
  40:               columnCsharptype="string"; 
  41:            else  if (column.DataType.ToString()=="ntext")
  42:               columnCsharptype="string"; 
  43:            else  if (column.DataType.ToString()=="varchar")
  44:               columnCsharptype="string";
  45:            else  if (column.DataType.ToString()=="char")
  46:               columnCsharptype="string"; 
  47:            else  if (column.DataType.ToString()=="text")
  48:               columnCsharptype="string"; 
  49:            else  if (column.DataType.ToString()=="smallint")
  50:               columnCsharptype="Int16";   
  51:            else  if (column.DataType.ToString()=="datetime")
  52:               columnCsharptype="DateTime"; 
  53:            else  if (column.DataType.ToString()=="money")
  54:               columnCsharptype="decimal";   
  55:            else  if (column.DataType.ToString()=="bit")
  56:               columnCsharptype="bool";
  57:            else  if (column.DataType.ToString()=="image")
  58:               columnCsharptype="byte";
  59:            else  if (column.DataType.ToString()=="real")
  60:               columnCsharptype="single";  
  61:            else
  62:               columnCsharptype=column.DataType.ToString(); 
  63:  #>
  64:           /// <summary>
  65:           /// Gets or sets the <#=column.Name#>
  66:           /// </summary>
  67:           /// <value>The <#=column.Name.ToLower()#></value>
  68:           public <#=columnCsharptype #>  <#=column.Name#>  {get;set;}
  69:           
  70:   <#
  71:          }
  72:  #>
  73:      }
  74:      
  75:  <#
  76:      }
  77:  #>
  78:  }

你可以把它另存为扩展名为.tt的文件,我起名叫CommonEntity.tt。 然后在VisualStudio2008中选中它点击右键执行Run Custom Tool,就自动生成这样的代码:

   1:  using System;
   2:   
   3:  /// Right click .tt file "Run Custom Tool" to update partial model.
   4:  /// Author Petter Liu  http://wintersun.cnblogs.com
   5:  namespace MyApp.CommonEntity
   6:  {
   7:       /// <summary>
   8:       /// Categories Entity
   9:       /// </summary>
  10:       public partial class Categories  
  11:       {
  12:            /// <summary>
  13:           /// Gets or sets the CategoryID
  14:           /// </summary>
  15:           /// <value>The categoryid</value>
  16:           public int  CategoryID  {get;set;}
  17:           
  18:            /// <summary>
  19:           /// Gets or sets the CategoryName
  20:           /// </summary>
  21:           /// <value>The categoryname</value>
  22:           public string  CategoryName  {get;set;}
  23:           
  24:            /// <summary>
  25:           /// Gets or sets the Description
  26:           /// </summary>
  27:           /// <value>The description</value>
  28:           public string  Description  {get;set;}
  29:           
  30:            /// <summary>
  31:           /// Gets or sets the Picture
  32:           /// </summary>
  33:           /// <value>The picture</value>
  34:           public byte  Picture  {get;set;}
  35:           
  36:       }

这是最简约的Entity code了,实际你可扩展你所需要的模板。关于T4模板,网上有些资料可以参考:

T4 (Text Template Transformation Toolkit) Code Generation - Best Kept Visual Studio Secret

还有一些教程:

Creating your first code generator Troubleshooting code generation errors Debugging code generation files Creating reusable code generation templates Creating complex code generators Reusing code generators on multiple projects

希望这篇Post对您有帮助。

Author:Petter Liu    http://wintersun.cnblogs.com

T4 (Text Template Transformation Toolkit)实现简单实体代码生成相关推荐

  1. T4((Text Template Transformation Toolkit))模版引擎之基础入门 C#中文本模板(.tt)的应用...

    1 关于C#中文本模板(.tt)的简单应用 https://blog.csdn.net/zunguitiancheng/article/details/78011145 任何一个傻瓜都能写出计算机能理 ...

  2. Text Template 模板

    最近,使用到了 html/template 和 text/template 类库,通过使用模板,让项目清爽了不少.Go 的这个类似于和 PHP 的模板引擎,使用起来的话,类似于把大象关进冰箱的流程.第 ...

  3. Text Template Parser(多源数据提取软件)官方正式版V2.5 | 数据提取软件有哪些?

    ​          Text Template Parser 是一款简单实用的集数据检索.数据提取和数据转换的多数据源综合性文本数据提取软件,拥有友好的用户界面,可以帮助用户从包括文本文件.网页.电 ...

  4. <script type =“text / template”> ... </ script>的说明

    本文翻译自:Explanation of I just stumbled upon something I've never seen before. 我偶然发现了一些我以前从未见过的东西. In t ...

  5. script type=text/template是干什么的,为什么要把html写在js中? 这是什么编程语言风格,都能这样用吗?...

    这一段存放了一个模板. 在js里面,经常需要使用js往页面中插入html内容.比如这样: var number = 123; $('#d').append('<div class="t ...

  6. 零元学Expression Blend 4 - Chapter 25 以Text相关功能就能简单做出具有设计感的登入画面...

    原文:零元学Expression Blend 4 - Chapter 25 以Text相关功能就能简单做出具有设计感的登入画面 本章将交大家如何运用Blend 4 内的Text相关功能做出有设计感的登 ...

  7. html/template 和 text/template区别

    文章目录 前言 html/template text/template 前言 最近在学习go template,跟着一篇文章进行例程的学习,结果发现无论怎么调试,都没有办法复现例程的打印结果 纠结了一 ...

  8. text/template与html/template的区别

    text/template 是将内容都已text文本格式返回. html/tempalte针对的是需要返回HTML内容的场景. 在模板渲染过程中会对一些有风险的内容进行转义,以此来防范跨站脚本攻击. ...

  9. java实体类转换xml_简单实体类和xml文件的相互转换方法

    最近写一个题目,要求将一组员工实体类转换成xml文件,或将xml文件转换成一组实体类.题目不难,但写完感觉可以利用泛型和反射将任意一个实体类和xml文件进行转换.于是今天下午立马动手 试了下,做了个简 ...

最新文章

  1. [导入]使用SqlCommand对象执行存储过程
  2. leetcode之回溯backtracing专题1
  3. 嵌入式Linux初始化硬件RTC,嵌入式Linux系统中的快速启动技术研究
  4. Android如果对APK进行加密,提高反编译难度(思路)
  5. Android笔记-雷电模拟器(Android5.1.1)安装Xposed
  6. js 单精度浮点数转10进制_确保前端 JavaScript 浮点数精度的四则运算方法
  7. 算法第五章上机实践报告
  8. 今天来谈一谈环境对我们的习惯有什么影响
  9. 男人拥有女人后的心态变化
  10. TypeError: unhashable type: 'list'
  11. Effective C++: lambda表达式与闭包.
  12. Atitit 核心技术有哪些一般 目录 第一章 Rest调用交互 2 第二章 2 第三章 Cmd调用交互 2 第四章 2 第五章 爬虫技术 2 第一节 Httpclient 2 第二节 Html
  13. autocoder自动代码生成器_Spring Boot 集成MyBatis Plus代码生成器
  14. Java 动态编译基础学习
  15. java中的undefined_undefined是什么意思啊?
  16. SpringSecurity登陆受权出现This object has not been built问题解决
  17. 服务器中修改数据库配置,服务器修改数据库配置未生效
  18. 两个服务共用一个微信支付
  19. 计算机由哪几种显卡,各类显卡大比拼,你会选择哪一款显卡使用?
  20. 知识库递归编程java和prolog代码;逻辑语言Prolog简介(附24555字PDF发“递归prolog简介”下载)

热门文章

  1. 深度丨人工智能的最大未解之谜是什么?
  2. Python 之 matplotlib (八)Bar
  3. 德克萨斯AM大学的一项新技术可以让我们通过触摸屏「感受」物体
  4. 从视觉系统的原理入手 破解VR眩晕症
  5. 前沿研究丨基于驾驶脑的智能驾驶车辆硬件平台架构
  6. 什么是启发式?什么是产生式?
  7. 宜宾地震,这个系统跑赢了“地震波”!
  8. 2万字看完腾讯最纯粹的一届WE大会:从黑洞、虫洞到克隆猴
  9. 俄罗斯智库 | 人工智能在军事领域的发展现状及应用前景
  10. 自动驾驶出租车可行性研究报告:2020年能成真吗?