使用CodeSmith 生成代码
来源:互联网 发布:矿物晶体结构数据库 编辑:程序博客网 时间:2024/04/29 04:04
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、编译模板,在属性窗口中给变量赋值,然后生成即可看到生成的代码。
0 0
- 使用CodeSmith 生成代码
- 如何使用CodeSmith批量生成代码
- 如何使用CodeSmith批量生成代码
- 如何使用CodeSmith批量生成代码(原创)
- 如何使用CodeSmith批量生成代码
- 如何使用CodeSmith批量生成代码
- 如何使用CodeSmith批量生成代码(原创)
- 如何使用CodeSmith批量生成代码
- 如何使用CodeSmith自动生成C#代码
- 如何使用CodeSmith批量生成代码
- 如何使用CodeSmith批量生成代码
- 如何使用CodeSmith批量生成代码
- 使用CodeSmith连接SQLite生成代码
- CodeSmith自动生成代码
- CodeSmith通过CSP文件生成代码的API使用
- 代码生成工具 CodeSmith [转贴]
- codesmith 三层架构代码生成
- 何用CodeSmith 批量生成代码
- SharePoint 2013 日历重叠功能简介
- python 学习笔记(二十一)
- 输出目录和工作目录
- SDL显示文字
- 此版本的应用未配置为通过google play结算
- 使用CodeSmith 生成代码
- UVA - 11300(问题转换)
- HTML5 拖动实例
- java的动态代理机制详解
- 在SDL工程中让SDL_ttf渲染汉字
- Android事件分发详解(五)——Touch事件传递验证
- Fragment学习代码
- Linux下查看系统版本号相关命令
- 开源日志系统对比