`
lyunabc
  • 浏览: 551441 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

CodeSmith 使用教程(14) 使用SchemaExplorer来获取数据库定义

阅读更多

在前面例子CodeSmith 使用教程(3): 自动生成Yii Framework ActiveRecord我们使用了SchemaExplorer 来获取数据的MetaData(数据库Schema 定义)来自动生成Yii Framework的数据库表对应的ActiveRecord定义,本篇较详细的介绍一下的SchemaExplorer的用法,下一篇通过实例除了自动生成自动生成Yii Framework的数据库表对应的ActiveRecord定义外,还自动生成关联ActiveRecord的关系定义,也就是根据数据库表之间的关系(一对多,一对一,多对多)为ActiveRecord定义relations.

CodeSmith的SchemaExplorer定义在AssemblySchemaExplorer.dll 中,其命名空间为SchemaExplorer ,因此如果需要使用CodeSmith的SchemaExplorer 功能的话,需要添加对SchemaExplorer.dll的引用,如下:

<%@ CodeTemplate Language="C#" TargetLanguage="Text" Description="List all database tables" %>
<%@ Property Name="SourceDatabase" Type="SchemaExplorer.DatabaseSchema"
 Category="Context" Description="Database containing the tables." %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>
Tables in database "<%= SourceDatabase %>":
<% for (int i = 0; i < SourceDatabase.Tables.Count; i++) { %>
        <%= SourceDatabase.Tables[i].Name %>
<% } %>

以上代码添加了SchemaExplorer库的引用,并定义了一个属性SourceDatabase,其类型为SchemaExplorer.DatabaseSchema ,在运行这个模板前,必须设置SourceDatabase的值:

20130107002

SourceDatabase属性后显示一个“…”的按钮,表示使用一个附加的专用的编辑器来定义这个属性,点击这个按钮将启动数据库选择对话框:

20130107003

使用这个对象框可以选择已通过Schema Explorer定义过的数据库或者添加新的数据库,通过单击“…”来添加新的数据库定义:

20130107004

如果添加一个新的数据源,SchemaExplorer 打开了 数据源对话库 ,选择合适的数据源类型:

20130107006

CodeSmith缺省支持的数据源类型有很多,包括了常用的ADO, DB2,MySQL,Oracle,PostgreSQL, SQL Server,Sqlite等,也可以自定义新的数据源类型。

本例我们选用SQL Server类型 ,并使用Chinook示例数据库:

20130107007

选择数据库Chinook,显示结果:

Tables in database "Chinook":
        Album
        Artist
        Customer
        Employee
        Genre
        Invoice
        InvoiceLine
        MediaType
        Playlist
        PlaylistTrack
        Track
SchemaExplorer 对应数据库的MetaData(表定义,列定义,主键,外键定义等)定义如下的对象模型,可以在代码模板中使用:
20130107008
上图表示SchemaExplorer 定义了多种对象集合类型,对象类型,比如DatabaseSchema 定义了Commands属性,
其类型为CommandSchemaCollection,这个集合的每项类型为CommandSchema ,对应到数据库定义中的一个命令。
通过这个属性可以获取Command的定义等信息。

使用SchemaExplorer 除了可以使用SchemaExplorer.DatabaseSchema类型来定义属性,还可以通过下面四种类型:
  • TableSchema和 TableSchemaCollection
  • ViewSchema 和 ViewSchemaCollection
  • CommandSchema 和 CommandSchemaCollection
  • ColumnSchema 和 ColumnSchemaCollection

分别对应到表类型,视图类型,命令类型,列类型,比如使用

<%@ Property Name="SourceColumns"  Type="SchemaExplorer.ColumnSchemaCollection"
Category="Database"  Description="Select a set of columns." %>

选择一个表的多个列(ColumnSchemaCollection)

20130107009

对应这些集合类型(比如TableSchemaCollection,ColumnSchemaCollection)缺省的排序是由数据库决定的,因此可能不是排好序的,如果需要排序的话,可以通过Sort方法来实现,比如:

TableSchemaCollection tables = new TableSchemaCollection(SourceDatabase.Tables);
tables.Sort(new PropertyComparer("Name"));

SQL Server数据库可以对表或列定义一些附加的属性(Extended Property)SchemaExplorer 也提供了方法可以来访问/添加 这些Extended Property。
比如SQL Server定义一个扩展属性表示某个列是否为Identity列,这可以通过下面代码来获取:

Identity Field = <% foreach(ColumnSchema cs in SourceTable.Columns) {
    if( ((bool)cs.ExtendedProperties["CS_IsIdentity"].Value) == true) {
        Response.Write(cs.Name);
    }
} %>

更好的方法是使用SchemaExplorer.ExtendedPropertyNames类和ExtendedProperty定义的扩展方法。

例如:

Identity Field = <% foreach(ColumnSchema cs in SourceTable.Columns) {
    if(cs.ExtendedProperties.GetByKey<bool>(SchemaExplorer.ExtendedPropertyNames.IsIdentity) == true) {
        Response.Write(cs.Name);
    }
} %>

CodeSmith缺省支持的扩展属性如下:

表的列

Extended Property Key SchemaExplorer.ExtendedPropertyName Property Name 描述
CS_Description Description The Description
CS_IsRowGuidCol IsRowGuidColumn The Column is a Row Guid
CS_IsIdentity IsIdentity Identity Column
CS_IsComputed IsComputed Computed Column or Index
CS_IsDeterministic IsDeterministic Column is Deterministic
CS_IdentitySeed IdentitySeed Identity Seed
CS_IdentityIncrement IdentityIncrement Identity Increment
CS_SystemType SystemType The System Type (E.G., System.String)
CS_Default DefaultValue The default value

视图的列

Extended Property Key SchemaExplorer.ExtendedPropertyName Property Name 描述
CS_Description Description The Description
CS_IsComputed IsComputed Computed Column or Index
CS_IsDeterministic IsDeterministic Column is Deterministic

命令参数

Extended Property Key SchemaExplorer.ExtendedPropertyName Property Name 描述
CS_Description Description The Description
CS_Default DefaultValue The default value

下一篇通过Table的Key(外键和主键)为Yii Framework 表的ActiveRecord添加Relations



分享到:
评论

相关推荐

    CodeSmith 带注释的SchemaExplorer.SqlSchemaProvider

    总的来说,"CodeSmith 带注释的SchemaExplorer.SqlSchemaProvider"解决了在使用CodeSmith处理SQL Server时无法获取字段注释的难题,它使得开发者能够在生成的代码中充分利用数据库的注释信息,提升代码质量和维护性...

    CodeSmith 基础教程 word版

    本文档是一个关于 CodeSmith 的基础教程,针对的是 CodeSmith Professional v5.1.3.8510 版本,以 C# 为例进行说明。 首先,我们需要对 CodeSmith 进行必要的设置,以便它能够正确处理中文字符。在工具的选项中,...

    codesmith使用方法

    在实际使用中,例如 ORM 框架生成,可以利用 Codesmith 读取数据库表结构,然后自动生成对应的实体类、数据访问接口以及实现。通过模板属性设置,接收数据库连接信息,然后在模板区域利用 `TableSchema` 类型参数...

    用CodeSmith生成数据库实体类的代码 VB

    这里使用了`&lt;%=CurTable.Name%&gt;`来动态生成类名,并调用了`GetMakeCode`函数来获取具体的代码实现。 #### 5.3 生成C#实体类 ```vb using System; using System.Data; using EagleFlyFCL.Data; namespace ...

    codesmith教程.pdf

    首先,从文件标题和描述中我们可以看出,这是关于CodeSmith的教程。CodeSmith 是一个基于模板的代码生成器,适用于 .NET 环境,特别是与C# 配合使用。它允许开发者通过模板快速生成数据库访问代码、实体类、数据访问...

    CodeSmith的使用.doc

    ### CodeSmith的使用详解 #### 一、工具设置与中文支持 CodeSmith是一款强大的代码生成工具,能够根据数据库模式自动生成各种语言的源代码。然而,对于非英语环境的开发者而言,工具对中文的支持至关重要。默认...

    codesmith超级好的学习教程word版本代码生成器net必备学习.pdf

    CodeSmith 是一款强大的代码生成工具,对于.NET开发者来说,它能大大提高开发效率,尤其是在处理大量重复性代码时。本教程将详细介绍如何利用CodeSmith进行高效的学习和应用。 首先,我们需要了解CodeSmith的基本...

    codesmith 抽象工厂5

    2. **属性声明**:模板使用`&lt;%@PropertyName="TargetTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="TargetTable that the object is based on."%&gt;`等形式来声明变量,这些变量可以是...

    codesmith超级好的学习教程代码生成器net必备学习分享.pdf

    这个超级好的学习教程主要介绍了如何使用CodeSmith进行模板设计和代码自动生成,特别强调了在处理中文字符时的设置方法以及模板的六个关键区域。 首先,确保CodeSmith支持中文显示和保存至关重要。在【工具】-&gt;...

    学习codesmith超级好的学习教程word版本代码生成器net必备学习.pdf

    CodeSmith是一款强大的代码生成工具,尤其对于.NET开发者来说,它可以极大地提高开发效率,通过自定义模板来自动化生成重复的代码。本文主要围绕如何使用CodeSmith Professional v5.1.3.8510进行模板编写和设置,...

    CodesimthPro

    - **数据库支持**:CodeSmithPro内置了SchemaExplorer组件,能够连接到多种类型的数据库,如SQL Server、Oracle等,读取数据库结构并生成对应的实体类、数据访问层代码。 - **集成开发环境(IDE)支持**:...

Global site tag (gtag.js) - Google Analytics