`
wangdeshui
  • 浏览: 255647 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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://www.cnblogs.com/Files/cnblogsfans/template.rar

分享到:
评论

相关推荐

    codesmith生成实体类简单模板

    在软件开发过程中,尤其是在与数据库交互的业务逻辑层,实体类的创建是一项繁琐且重复的工作。 Codesmith是一款强大的代码生成工具,它允许开发者通过定制模板来自动生成代码,极大地提高了开发效率。本篇文章将详细...

    codesmith 生成三层数据访问层

    根据提供的文件信息,我们可以深入探讨如何使用 Codesmith 来生成三层架构中的数据访问层(DAL)。三层架构是一种常见的软件架构模式,它将应用程序分为三个主要的逻辑层:表示层、业务逻辑层和数据访问层。这种分层...

    CodeSmith根据数据库表生成实体类的例子

    里面是CodeSmith根据数据库表生成实体类的例子, 数据库是mysql,生成的是java文件, codesmith的mysql链接字符串为: Database=test;Data Source=127.0.0.1;User Id=root;Password=root;port=3306

    codesmith生成的五层架构

    Codesmith,作为一款强大的代码生成工具,能够帮助开发者快速构建符合五层架构的系统。本文将详细解析codesmith如何生成五层架构以及五层架构的各个组成部分。 首先,五层架构通常包括以下五部分:表现层...

    codesmith生成实体类、数据层类、和存储过程

    【codesmith生成实体类、数据层类、和存储过程】是一种高效的软件开发工具,它能够自动化地根据数据库结构自动生成对应的C#代码,包括实体类(Entity Class)、数据访问层(Data Access Layer)类以及与数据库交互的...

    C#版 -- 实用性CodeSmith模板(自动生成三层架构底层代码)

    总的来说,"C#版 -- 实用性CodeSmith模板(自动生成三层架构底层代码)"是一个高效工具,它简化了三层架构应用程序的开发过程,使得开发者可以更加专注于业务需求和创新,而不用在基础代码上花费过多时间。...

    解决CodeSmith 8.0生成mysql实体没有字段注释和表注释,亲测好用

    CodeSmith是一款强大的代码生成工具,尤其适用于快速生成数据库相关的实体模型、数据访问层以及业务逻辑层代码。在本文中,我们将深入探讨如何解决在使用CodeSmith 8.0时遇到的MySQL实体没有字段注释和表注释的问题...

    解决CodeSmith生成mysql实体没有字段注释和表注释

    CodeSmith是一款著名的代码生成器,它能够根据数据库模式自动生成.NET代码,包括实体类、数据访问层(DAL)和业务逻辑层(BLL)。然而,有时我们可能需要自定义生成的代码,例如为MySQL实体添加字段注释和表注释,以...

    ASP.NET 中 CodeSmith可以自动生成三层代码

    CodeSmith支持自定义模板,开发者可以根据自己的需求创建模板来生成代码,包括实体类、数据访问接口、业务逻辑接口及其实现、以及表示层的控件等。这使得在ASP.NET中实现三层架构的代码生成变得轻松快捷。 1. **...

    CodeSmith生成三层访问代码

    UI层的代码生成通常不在CodeSmith的直接控制下,但CodeSmith生成的BLL和DAL接口可以帮助开发者更轻松地构建这一层。 在压缩包文件“外键以实体实现的在三层”中,我们可以推断CodeSmith生成的代码可能考虑了数据库...

    codesmith 3层代码生成模板

    Codesmith是一款基于.NET平台的代码生成工具,它通过读取数据库或其他数据源的信息,自动生成符合特定设计模式的源代码,如实体类、数据访问层、业务逻辑层等。它的核心优势在于可以根据不同的项目需求定制模板,...

    CodeSmith 生成三层模板

    在本案例中,"CodeSmith 生成简单三层和SqlHelper的模板"指的是使用CodeSmith创建了一个能够自动生成三层架构(数据访问层、业务逻辑层、表示层)以及SqlHelper类的模板。 三层架构是一种常见的软件设计模式,主要...

    普通 codesmith三层代码生成模板

    "普通 codesmith三层代码生成模板" 是一个专为C#开发者设计的工具,用于自动化生成代码,特别是在开发三层架构的应用程序时。三层架构通常包括表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和...

    codeSmith自动生成三层中的代码

    "codeSmith自动生成三层中的代码"这一主题表明我们将探讨如何利用CodeSmith来生成软件架构中的三层架构代码,包括表示层、业务逻辑层和数据访问层。 首先,三层架构是一种常见的软件设计模式,它将应用程序分为三个...

    CodeSmith根据数据库表生成实体类

    里面是CodeSmith根据数据表生成实体类的例子 用的是mysql数据库 链接字符串为: Database=test;Data Source=127.0.0.1;User Id=root;Password=root;port=3306

    CodeSmith三层代码生成模板

    CodeSmith是一款强大的代码生成工具,尤其在快速构建企业级应用的三层架构方面有着显著的优势。三层架构是一种常见的软件设计模式,它将应用程序分为表现层(Presentation Layer)、业务逻辑层(Business Logic ...

    CodeSmith .net 三层自动生成模板

    总结来说,CodeSmith .NET 2.0三层自动生成模板是一个强大的开发辅助工具,它可以帮助开发者快速构建符合三层架构的项目,提高开发效率,并保持代码的结构清晰和易于维护。通过熟练掌握和利用CodeSmith,开发者可以...

    asp.net codeSmith三层代码生成模板

    CodeSmith是一款强大的代码生成工具,能够自动生成诸如数据访问层(DAL)、业务逻辑层(BLL)以及表现层(UI)的代码,极大地减少了程序员手动编写重复代码的工作量。 三层架构是一种常见的软件设计模式,它将应用...

    CodeSmith的C#实体类 数据访问层 业务逻辑层的模板

    CodeSmith是一款强大的代码生成工具,尤其在快速构建C#应用程序时非常有用。它通过使用模板语言,能够自动生成包括实体类、数据访问层(DAL)和业务逻辑层(BLL)在内的各种代码,大大提高了开发效率,减少了重复...

    自动生成实体类CodeSmith

    CodeSmith自动生成实体类,数据访问层/.................

Global site tag (gtag.js) - Google Analytics