在前面例子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的值:
SourceDatabase属性后显示一个“…”的按钮,表示使用一个附加的专用的编辑器来定义这个属性,点击这个按钮将启动数据库选择对话框:
使用这个对象框可以选择已通过Schema Explorer定义过的数据库或者添加新的数据库,通过单击“…”来添加新的数据库定义:
如果添加一个新的数据源,SchemaExplorer 打开了 数据源对话库 ,选择合适的数据源类型:
CodeSmith缺省支持的数据源类型有很多,包括了常用的ADO, DB2,MySQL,Oracle,PostgreSQL, SQL Server,Sqlite等,也可以自定义新的数据源类型。
本例我们选用SQL Server类型 ,并使用Chinook示例数据库:
选择数据库Chinook,显示结果:
Tables in database "Chinook":
Album
Artist
Customer
Employee
Genre
Invoice
InvoiceLine
MediaType
Playlist
PlaylistTrack
Track
SchemaExplorer 对应数据库的MetaData(表定义,列定义,主键,外键定义等)定义如下的对象模型,可以在代码模板中使用:
上图表示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)
对应这些集合类型(比如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教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf ...
CodeSmith使用教程,开发资料,PDF高清淅版,对CodeSmith熟悉的朋友都知道,CodeSmith是一个基于模板的代码生成工具,它使用类似于ASP.NET的语法来生成代码或文本,本教程将带你掌握CodeSmith的使用方法和原理等...
CodeSmith开发使用教程资料 pdfCodeSmith开发使用教程资料 pdfCodeSmith开发使用教程资料 pdfCodeSmith开发使用教程资料 pdf
内部包含两个学习文件:CodeSmith.docx和CodeSmith使用手册及实例.pdf
前言11第 1 章第 1 章概述概述44第 2 章第 2 章编写第一个代码模板编写第一个代码模板11第 3 章第 3 章自动生成Yii Framework Ac
相信很多小伙伴在使用CodeSmith连接sqlserver生成代码时都会遇到取不到字段注释的情形, 现在,福利来啦!! CodeSmith 7.0.2已测试
CodeSmith使用基础教程 非常详细的网页教程
codesmith使用教程。快速开发会用得到。
我自己做的CodeSmith模板,针对MySql数据库的,拿出来与大家分享。我自己用着还好,我在模板中截取了数据库表名,所以数据库表名为为tb_数据库表名,要注意啊。
CodeSmith安装包已经模板代码和使用教程,原版程序+注册机+教程(包含图文教程),视频教程,三层模板的通用代码生成模板
CodeSmith 基础教程 word版,比较简单
CodeSmith8.0.1 postgresql mysql 替换包 可读取表描述,字段描述 SchemaExplorer.PostgresqlSchemaProvider SchemaExplorer.MysqlSchemaProvider 原版安装后,没法使用。 线上找好久,要不是不可用,要不就是没法...
CodeSmith 使用手册及实例,初学者学习的很好资料
CodeSmith 是一种基于模板的代码生成工具,它使用类似于 ASP.NET 的语法来生成任意类型的代码或文本。与其他许多代码生成工具不同,CodeSmith 不要求您订阅特定的应用程序设计或体系结构。使用 CodeSmith,可以生成...
CodeSmith v8.5 SchemaExplorer.PostgreSQLSchemaProvider 源码,根据官方文档编写的,非反编译方式实现,可自行按需求修改,亲测可用。 可读表字段描述,内有已编译文件,直接复制到CodeSmith\v8.5跟目录即可用。 ...
codesmith编程完整教程 所用工具: CodeSmith Professional v5.1.3.8510,代码示例全部是以C#为例。
CodeSmith 基础教程.CodeSmith 基础教程.CodeSmith 基础教程.CodeSmith 基础教程.CodeSmith 基础教程
由于模板映射mysql生成代码后发现注释丢了,修正了mysql下获取注释的问题,需要的朋友可以下载直接替换对应的dll即可
使用CodeSmith进行简单的属性配置,即可批量生成表的创建脚本(sqlserver)
里面是CodeSmith根据数据库表生成实体类的例子, 数据库是mysql,生成的是java文件, codesmith的mysql链接字符串为: Database=test;Data Source=127.0.0.1;User Id=root;Password=root;port=3306