CodeSmith 生成代码
使用CodeSmith 生成代码
CodeSmith是一款优秀的代码生成工具。在ORM中,它能帮助我们生成实体类、XML配置文件,从而简化了我们一部分的开发工作。下面简要说说它的基本用法。
1、 打开CodeSmith,创建一个模板
File->New->CSharp Template 。创建的模板内容如下图
模板中SampleStringProperty 和 SampleBooleanProperty都是声明的变量,在下边代码中都可以用到该变量,我们可以把该模板看做是一个HTML页面,没有用标签圈起来的代码和用<%= %>内部的代码都可以输出到界面上。其中<%= %>与aspx页面中的用法一致。
2、编译代码,给声明的变量赋值
点击红色方框圈住的按钮即可编译模板,模板编译通过后右侧会出现一个Properties的框,在这里面我们可以给我们在模板中定义的变量赋值,如下图所示。
3、运行模板
4、根据数据库生成对应实体层的代码
1、连接数据库
我们创建一个localhost的数据库连接,方法如下图
2、新建一个Entity.cst模板,编写如下模板代码
<%@ CodeTemplate Language="C#" TargetLanguage="C#" ResponseEncoding="UTF-8" Debug="False" Description="生成数据库实体" %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="属性" Description="要生成实体的数据表" %>
<%@ Property Name="NameSpace" Type="System.String" Optional="False" Default="Modul" Category="属性" Description="实体类所在的命名空间" %> <%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %> <%--*本代码由代码生成器自动生成,请不要更改此文件的任何代码。
*生成时间:<%= DateTime.Now.ToLocalTime() %>
*生成者:<%= opuser %>--%>
using System;
namespace <%= this.NameSpace+".Entity.Entities" %>
{
///<summary>
///表<%= this.SourceTable.Name %>的实体类
///</summary>
public class <%= this.SourceTable.Name %>
{
<% foreach(ColumnSchema column in this.SourceTable.Columns){%>
<%--生成get set 方法--%>
/// <summary>
/// <%= string.IsNullOrEmpty(column.Description)?StringUtil.ToCamelCase(column.Name):column.Description %>
/// </summary>
public virtual <%= CSharpAlias[column.SystemType.FullName] %> <%= StringUtil.ToPascalCase(column.Name) %>
{
get;set;
} <%}%>
}
}
在该模板中我们定义了两个变量:SourceTable--该变量存储需要生成的数据库表,NameSpace--生成的代码中对应的命名空间。
3、编译代码,在属性窗口中给SourceTable和NameSpace变量赋值,如下图
4、点击运行即可看到生成的代码。
5、生成的代码存储到指定的文件夹
1、添加一个Main.cst模板,并编写如下代码。
Main.cst与Entity.cst在同一个目录下。代码中有比较全的注释,可以仔细看一下。
<%--
Name:
Author:
Description:
--%>
<%@ Template Language="C#" TargetLanguage="Text" %> <%-- 注册实体层Entity模板 --%>
<%@ Register Name="EntityTemplate" Template="Entity.cst" MergeProperties="False" %> <%@ Property Name="SourceDatabase" Type="SchemaExplorer.DatabaseSchema" DeepLoad="True" Optional="False" Description="存数数据库" %>
<%@ Property Name="NameSpace" Type="System.String" Default="BitCar.Finance.CC" Optional="False" Description="命名空间" %> <%
//创建实体层Entity类
this.GenerateEntityClasses(); Debug.WriteLine("OK");
%> <script runat="template">
//生成实体Entity类
private void GenerateEntityClasses()
{
CodeTemplate Template =new EntityTemplate();//实体
//循环数据数据库中的表
foreach(TableSchema table in this.SourceDatabase.Tables)
{
string FileDirectory = OutputDirectory +"\\Mode\\Entities\\"+ table.Name +".cs";
//给Entity.cst模板中的变量SourceTable 赋值
Template.SetProperty("SourceTable",table);
//给Entity.cst模板中的变量NameSpace 赋值
Template.SetProperty("NameSpace",NameSpace);
//文件输出
Template.RenderToFile(FileDirectory,true);
Debug.WriteLine(FileDirectory +" 创建成功.");
}
} </script> <script runat="template">
//代码模板输出路径,编译后可以在属性窗口中选择
private string Directory = String.Empty; [Editor(typeof(System.Windows.Forms.Design.FolderNameEditor), typeof(System.Drawing.Design.UITypeEditor))]
[Optional, NotChecked]
[DefaultValue("")]
public string OutputDirectory
{
get
{
return Directory;
}
set
{
if (value.EndsWith("\\")) value = value.Substring(0, value.Length -1);
Directory = value;
}
}
</script>
<%="全部生成成功" %>
该模板中定义了三个变量:Namespace--指定生成的代码的命名空间,SourceDatabase--存储数据库,Directory--指定生成代码存储的路径(该变量在模板底部定义)
2、编译模板,在属性窗口中给变量赋值,然后生成即可看到生成的代码。
原文参考:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html
CodeSmith 生成代码的更多相关文章
- 使用CodeSmith 生成代码
CodeSmith是一款优秀的代码生成工具.在ORM中,它能帮助我们生成实体类.XML配置文件,从而简化了我们一部分的开发工作.下面简要说说它的基本用法. 1. 打开CodeSmith,创建一个模板 ...
- 黄聪:如何使用CodeSmith批量生成代码(转:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html)
先看看CodeSmith的工作原理: 简单的说:CodeSmith首先会去数据库获取数据库的结构,如各个表的名称,表的字段,表间的关系等等,之后再根据用户自定义好的模板文件,用数据库结构中的关键字替代 ...
- CodeSmith 二、多模板按目录树批量自动生成代码
通过调用指定目录下的所有模板,逐一按照数据表生成独立的代码文件.支持多模板调用.支持所有数据表生成或批量指定多个生成.支持自动的文件目录结构.支持代码文件格式化命名等. 背景:最近一个新项目一高兴选了 ...
- 如何使用CodeSmith批量生成代码(原创系列教程)
在上一篇我们已经用PowerDesigner创建好了需要的测试数据库,下面就可以开始用它完成批量代码生成的工作啦. 下面我会一步步的解释如何用CodeSmith实现预期的结果的,事先声明一下,在此只做 ...
- [转]黄聪:如何使用CodeSmith批量生成代码
本文转自:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html 在上一篇我们已经用PowerDesigner创建好了需要的测 ...
- 如何使用CodeSmith批量生成代码
在上一篇我们已经用PowerDesigner创建好了需要的测试数据库,下面就可以开始用它完成批量代码生成的工作啦. 下面我会一步步的解释如何用CodeSmith实现预期的结果的,事先声明一下,在此只做 ...
- 利用CodeSmith生成抽象工厂步骤
其实CodeSmith挺好的,帮我们主动生成不少代码,并且代码质量不错,下面就来介绍一下利用CodeSmith生成抽象工厂步骤 打开codesmith模板的buildall 注意path的设置,因为后 ...
- Android注解使用之通过annotationProcessor注解生成代码实现自己的ButterKnife框架
前言: Annotation注解在Android的开发中的使用越来越普遍,例如EventBus.ButterKnife.Dagger2等,之前使用注解的时候需要利用反射机制势必影响到运行效率及性能,直 ...
- mybatis Generator生成代码及使用方式
本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5889312.html 为什么要有mybatis mybatis 是一个 Java 的 ORM 框架,OR ...
随机推荐
- 5次Shift会触发粘滞键的妙用(转)
1.前提 你可以在平时亲身接触状态电脑,哪怕是在电脑主人不在的时候(虽然主人不在,或者关机了,进入电脑是要密码的). 2.原理 利用电脑连续按5次Shift会触发粘滞键,它会运行c:\winows\s ...
- C#程序(含多个Dll)合并成一个Exe
把C#程序(含多个Dll)合并成一个Exe的超简单方法 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. 但是,很多时候我们本想开发一款只需要一 ...
- UVA 193 Graph Coloring 图染色 DFS 数据
题意:图上的点染色,给出的边的两个点不能都染成黑色,问最多可以染多少黑色. 很水的一题,用dfs回溯即可.先判断和当前点相连的点是否染成黑色,看这一点是否能染黑色,能染色就分染成黑色和白色两种情况递归 ...
- USACO dualpal
/* ID:kevin_s1 PROG:dualpal LANG:C++ */ #include <iostream> #include <cstdio> #include & ...
- CentOS7 安装NFS SSH免密码登陆
配置5台虚拟机 ip为192.168.1.160 - 164,使用160作为共享服务器 使用yum安装nfs 以及rpcbind,有很多文章介绍,这里不再赘述 一.启动服务 1.启动rpcbind s ...
- WSHPSRS-匹克选择列表生成器-SRS(R12.2.3)
匹克选择列表生成器-SRS(R12.2.3) --US Program:Pick Selection List Generation - SRS Short Name:WSHPSRS Appli ...
- 如何使用滑动菜单SlidingMenu?
左側滑: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvanVuaHVhaG91c2U=/font/5a6L5L2T/fontsize/400/fill/I ...
- DEV GridView嵌套
近来的DEV搞更多.试图寻找专业点的程序做,对这样一个小小的研究. 本篇是多么真实,现在的记录,可以通过点击这条线的子表的内容相关联的行中打开的列表.的影响,如下面的: 以下是实现过程: 1.设计器里 ...
- 它们的定义ListView,实现Item除去滑动和滑出菜单效果
这个程序是基于变化从网上开源项目,详情货源忘记.懒得去搜索,.假设有不合适的地方.请与我联系作者.我会及时回复和处理! 序中主要包括两个ListView,一个是实现側滑删除.一个是側滑出菜单,代码中的 ...
- java_eclipse_设置全局编码_utf-8_编译class指定_运行jar乱码解决_不依赖环境
简述: javac时指定 编码 UTF-8 [ javac -encoding UTF-8 Test.java],运行时 java 指定编码 UTF-8 这样就不会出现乱码问题[ javac ...