T4 (Text Template Transformation Toolkit)实现简单实体代码生成
在很多场景下,我们都需要代码生成。你可以使用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)实现简单实体代码生成相关推荐
- T4((Text Template Transformation Toolkit))模版引擎之基础入门 C#中文本模板(.tt)的应用...
1 关于C#中文本模板(.tt)的简单应用 https://blog.csdn.net/zunguitiancheng/article/details/78011145 任何一个傻瓜都能写出计算机能理 ...
- Text Template 模板
最近,使用到了 html/template 和 text/template 类库,通过使用模板,让项目清爽了不少.Go 的这个类似于和 PHP 的模板引擎,使用起来的话,类似于把大象关进冰箱的流程.第 ...
- Text Template Parser(多源数据提取软件)官方正式版V2.5 | 数据提取软件有哪些?
Text Template Parser 是一款简单实用的集数据检索.数据提取和数据转换的多数据源综合性文本数据提取软件,拥有友好的用户界面,可以帮助用户从包括文本文件.网页.电 ...
- <script type =“text / template”> ... </ script>的说明
本文翻译自:Explanation of I just stumbled upon something I've never seen before. 我偶然发现了一些我以前从未见过的东西. In t ...
- script type=text/template是干什么的,为什么要把html写在js中? 这是什么编程语言风格,都能这样用吗?...
这一段存放了一个模板. 在js里面,经常需要使用js往页面中插入html内容.比如这样: var number = 123; $('#d').append('<div class="t ...
- 零元学Expression Blend 4 - Chapter 25 以Text相关功能就能简单做出具有设计感的登入画面...
原文:零元学Expression Blend 4 - Chapter 25 以Text相关功能就能简单做出具有设计感的登入画面 本章将交大家如何运用Blend 4 内的Text相关功能做出有设计感的登 ...
- html/template 和 text/template区别
文章目录 前言 html/template text/template 前言 最近在学习go template,跟着一篇文章进行例程的学习,结果发现无论怎么调试,都没有办法复现例程的打印结果 纠结了一 ...
- text/template与html/template的区别
text/template 是将内容都已text文本格式返回. html/tempalte针对的是需要返回HTML内容的场景. 在模板渲染过程中会对一些有风险的内容进行转义,以此来防范跨站脚本攻击. ...
- java实体类转换xml_简单实体类和xml文件的相互转换方法
最近写一个题目,要求将一组员工实体类转换成xml文件,或将xml文件转换成一组实体类.题目不难,但写完感觉可以利用泛型和反射将任意一个实体类和xml文件进行转换.于是今天下午立马动手 试了下,做了个简 ...
最新文章
- [导入]使用SqlCommand对象执行存储过程
- leetcode之回溯backtracing专题1
- 嵌入式Linux初始化硬件RTC,嵌入式Linux系统中的快速启动技术研究
- Android如果对APK进行加密,提高反编译难度(思路)
- Android笔记-雷电模拟器(Android5.1.1)安装Xposed
- js 单精度浮点数转10进制_确保前端 JavaScript 浮点数精度的四则运算方法
- 算法第五章上机实践报告
- 今天来谈一谈环境对我们的习惯有什么影响
- 男人拥有女人后的心态变化
- TypeError: unhashable type: 'list'
- Effective C++: lambda表达式与闭包.
- Atitit 核心技术有哪些一般 目录 第一章 Rest调用交互	2 第二章 	2 第三章 Cmd调用交互	2 第四章 	2 第五章 爬虫技术	2 第一节 Httpclient	2 第二节 Html
- autocoder自动代码生成器_Spring Boot 集成MyBatis Plus代码生成器
- Java 动态编译基础学习
- java中的undefined_undefined是什么意思啊?
- SpringSecurity登陆受权出现This object has not been built问题解决
- 服务器中修改数据库配置,服务器修改数据库配置未生效
- 两个服务共用一个微信支付
- 计算机由哪几种显卡,各类显卡大比拼,你会选择哪一款显卡使用?
- 知识库递归编程java和prolog代码;逻辑语言Prolog简介(附24555字PDF发“递归prolog简介”下载)