CodeSmith实战(一):生成实体层

简介:

1.先建立一个生成单个表的实体的模板

<%-- 
Name:
Author: 
Description: 
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="C#" Src="" Inherits="OutputFileCodeTemplate" Debug="False" Description="Template description here." %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema"  Category="Context"  Optional="True" Description="the table name"   %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Assembly Name="CodeSmith.BaseTemplates" %>
<%@ Import Namespace="CodeSmith.BaseTemplates" %>
<%@ Assembly Name="CodeSmith.CustomProperties" %>
<%@ Import Namespace="CodeSmith.CustomProperties" %>
namespace Jack.CodeSmith.Test
{
      public class <%=this.SourceTable.Name%>Model
    {
        public <%=this.SourceTable.Name%>()
        {
          //ToDo:    
        }
        <%for(int i=0; i<this.SourceTable.NonPrimaryKeyColumns.Count;i++){%>
            private <%=GetCSharpVariableType(this.SourceTable.NonPrimaryKeyColumns[i])%> m<%=this.SourceTable.NonPrimaryKeyColumns[i].Name%>;
        <%}%>
        <%for(int i=0; i<this.SourceTable.NonPrimaryKeyColumns.Count;i++)
        {                   
            int namelength=this.SourceTable.NonPrimaryKeyColumns[i].Name.Length;
            string colName=this.SourceTable.NonPrimaryKeyColumns[i].Name;%>
            public  <%=GetCSharpVariableType(this.SourceTable.NonPrimaryKeyColumns[i])%> <%=colName.Substring(0,1).ToUpper()%><%=colName.Substring(1,colName.Length-1)%>
            get {return m<%=this.SourceTable.NonPrimaryKeyColumns[i].Name%>;}
            set {m<%=this.SourceTable.NonPrimaryKeyColumns[i].Name%>=value;}
        <%}%>        
    }    
}

<script runat="template">
// Override the OutputFile property and assign our specific settings to it.
[FileDialog(FileDialogType.Save, Title="Select Output File", Filter="C# Files (*.cs)|*.cs", DefaultExtension=".cs")]
public override string OutputFile
{
    get {return base.OutputFile;}
    set {base.OutputFile = value;}
}
</script>
<script runat="template">
public string GetCSharpVariableType(ColumnSchema column)
{
    if (column.Name.EndsWith("TypeCode")) return column.Name;
    switch (column.DataType)
    {
        case DbType.AnsiString: return "string";
        case DbType.AnsiStringFixedLength: return "string";
        case DbType.Binary: return "byte[]";
        case DbType.Boolean: return "bool";
        case DbType.Byte: return "byte";
        case DbType.Currency: return "decimal";
        case DbType.Date: return "DateTime";
        case DbType.DateTime: return "DateTime";
        case DbType.Decimal: return "decimal";
        case DbType.Double: return "double";
        case DbType.Guid: return "Guid";
        case DbType.Int16: return "short";
        case DbType.Int32: return "int";
        case DbType.Int64: return "long";
        case DbType.Object: return "object";
        case DbType.SByte: return "sbyte";
        case DbType.Single: return "float";
        case DbType.String: return "string";
        case DbType.StringFixedLength: return "string";
        case DbType.Time: return "TimeSpan";
        case DbType.UInt16: return "ushort";
        case DbType.UInt32: return "uint";
        case DbType.UInt64: return "ulong";
        case DbType.VarNumeric: return "decimal";
        default:
        {
            return "__UNKNOWN__" + column.NativeType;
        }
    }
}
</script>

下面是代码格式化后的截图

 

11

22

33

44

55

2. 再建立一个模板,调用刚才建立的子模板

<%-- 
Name:
Author: 
Description: 
--%>

<%@ CodeTemplate Language="C#" TargetLanguage="C#"  Inherits=""  Description="This is my first data temple" %>
<%@ Property Name="SourceDatabase" Type="SchemaExplorer.DatabaseSchema" Category="" Description="Database containing the tables." %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Assembly Name="CodeSmith.BaseTemplates" %>
<%@ Import Namespace="CodeSmith.BaseTemplates" %>
<%@ Assembly Name="CodeSmith.CustomProperties" %>
<%@ Import Namespace="CodeSmith.CustomProperties" %>
<%@ Assembly Name="System.Design" %>
<%@ Import Namespace=" System.Design" %>
<%@ Register Name="SubTemplate" Template="C:\CodeSmithStudy\GenerateModel.cst" MergeProperties="True" ExcludeProperties="" %>
<%
for(int i=0; i<this.SourceDatabase.Tables.Count;i++)
{  
     SubTemplate  mySub=new SubTemplate();
    mySub.OutputFile=this.OutputDirectory+@"\"+this.SourceDatabase.Tables[i].Name+"Model.cs";
    mySub.SourceTable=this.SourceDatabase.Tables[i];
    mySub.Render(Response);        
}

%>

<script runat="template">
private string _outputDirectory = @"c:\codesmithstudy";
[Editor(typeof(System.Windows.Forms.Design.FolderNameEditor), typeof(System.Drawing.Design.UITypeEditor)),
Category("Custom"), Description("Output directory.")]
public string OutputDirectory
{
       get {return _outputDirectory;}
       set {_outputDirectory= value;}
}
</script>

格式化后的截图

66

77

 

3. 从属性窗口选择要保存到的文件夹和数据库

88

4.运行,得到如下结果

99

101

5. 模板下载

http://files.cnblogs.com/cnblogsfans/template.rar

本文转自敏捷的水博客园博客,原文链接http://www.cnblogs.com/cnblogsfans/archive/2008/02/10/1066760.html如需转载请自行联系原作者


王德水

相关文章
|
5月前
|
前端开发 IDE 数据库连接
ThinkPHP6 模型层的模型属性,表映射关系,以及如何在控制层中使用模型层和模型层中的简单CRUD
本文详细介绍了ThinkPHP6中模型层的使用,包括模型属性设置、表映射关系、以及如何在控制层中使用模型层进行CRUD操作。
ThinkPHP6 模型层的模型属性,表映射关系,以及如何在控制层中使用模型层和模型层中的简单CRUD
|
6月前
|
设计模式 固态存储 开发者
创建一个仅用一个函数/模块/类就可以处理这组不同事物的抽象
在软件开发中,良好的变量名和函数名能够显著提升代码的可读性和可维护性。对于变量命名,建议使用有意义且易于发音的名字(如 `currentDate` 而非 `yyyymmdstr`),对同类变量使用一致的词汇(如统一使用 `getUser`),以及使用解释性的变量名以减少理解成本(如使用常量 `MILLISECONDS_IN_A_DAY` 替代数字 `86400000`)。此外,避免不必要的上下文重复,并使用默认参数代替逻辑运算。对于函数,应限制参数数量(理想情况下不超过两个),确保每个函数只做一件事,并且函数名应清晰描述其功能。通过遵循这些原则,代码将更加简洁明了。
42 3
|
6月前
|
存储 开发框架 前端开发
EAV模型(实体-属性-值)的设计和低代码的处理方案(3)-- 实体属性定义及前端列表展示和数据录入处理
EAV模型(实体-属性-值)的设计和低代码的处理方案(3)-- 实体属性定义及前端列表展示和数据录入处理
|
前端开发 JavaScript
【组件封装】基于neo4jD3封装关系图、关联图谱
【组件封装】基于neo4jD3封装关系图、关联图谱
【组件封装】基于neo4jD3封装关系图、关联图谱
|
开发者
数据层设计与开发(数据层工厂类) | 学习笔记
简介:快速学习数据层设计与开发(数据层工厂类)
116 0
数据层设计与开发(数据层工厂类) | 学习笔记
|
测试技术 数据库 数据安全/隐私保护
【UML 建模】UML建模语言入门 -- 用例视图详解 用例视图建模实战(一)
【UML 建模】UML建模语言入门 -- 用例视图详解 用例视图建模实战(一)
470 0
【UML 建模】UML建模语言入门 -- 用例视图详解 用例视图建模实战(一)
|
测试技术 uml
【UML 建模】UML建模语言入门 -- 用例视图详解 用例视图建模实战(三)
【UML 建模】UML建模语言入门 -- 用例视图详解 用例视图建模实战(三)
266 0
【UML 建模】UML建模语言入门 -- 用例视图详解 用例视图建模实战(三)
|
测试技术 uml 数据安全/隐私保护
【UML 建模】UML建模语言入门 -- 用例视图详解 用例视图建模实战(二)
【UML 建模】UML建模语言入门 -- 用例视图详解 用例视图建模实战(二)
368 0
【UML 建模】UML建模语言入门 -- 用例视图详解 用例视图建模实战(二)
|
运维 测试技术 uml
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(一)
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(一)
434 0
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(一)
|
测试技术 uml 数据安全/隐私保护
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(二)
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(二)
314 0
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(二)