经过网友和昨天朋友的建议,今天我把NDOGenerator 代码生成器进行了重构,并在GUI上进行了增强,现在的NDOGenerator 生成器已经是一个通用的,使用方便的,易于扩展的代码生成器了。
在我的
NDOGenerator 代码生成器的配置如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="generator" type="NDO.Configuration.ProviderConfigurationHandler, NDO.Common"/>
</configSections>
<appSettings>
<add key="ConnectionString" value="Data Source=localhost; Database=Northwind; Integrated Security=true;"/>
<add key="JetConnectionString" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Northwind.mdb;"/>
<add key="OracleConn" value="Provider=MSDAORA.1;Data Source=***;User ID=***;Password=***;"/>
<add key= "SqlOledb" value="Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;User ID=sa;Password=;"/>
<add key="Oracle" value="Data Source=***;User ID=***;Password=***;"/>
</appSettings>
<generator defaultProvider="Test.Driver">
<providers>
<clear/>
<!-- outLanguage ="CSHARP,VBNET,ASPX,HTML,JAVA,JAVASCRIPT,SQL,XML,CPP"-->
<add
name="simple"
type="NDO.Tools.SimpleGenerator,NDO.Tools"
helper="NDO.Tools.CSHelper,NDO.Tools"
outLanguage ="CSHARP"
templateName ="Model.vm"
outDir="D:\temp\NW\Model"
outExtensionName=".cs"
ns="NDOTest.Model"/>
<add
name="javaModel"
type="NDO.Tools.SimpleGenerator,NDO.Tools"
helper="NDO.Tools.JavaHelper,NDO.Tools"
outLanguage ="Java"
templateName ="Java.Model.vm"
outDir="D:\temp\NW\Model"
outExtensionName=".java"
ns="NDOTest.Model"/>
<add
name="javaModel2"
type="NDO.Tools.SimpleGenerator,NDO.Tools"
helper="NDO.Tools.JavaHelper,NDO.Tools"
outLanguage ="Java"
templateName ="Java.Model2.vm"
outDir="D:\temp\NW\Model"
outExtensionName=".java"
ns="NDOTest.Model"/>
<add
name="ndoEntity"
type="NDO.Tools.SimpleGenerator,NDO.Tools"
helper="NDO.Tools.NDOHelper,NDO.Tools"
outLanguage ="CSHARP"
templateName ="NDO.Entity.vm"
outDir="D:\temp\NW\Model"
outExtensionName=".cs"
ns="NDOTest.Model"/>
<add
name="ndoActiveRecord"
type="NDO.Tools.SimpleGenerator,NDO.Tools"
helper="NDO.Tools.NDOHelper,NDO.Tools"
outLanguage ="CSHARP"
templateName ="NDO.ActiveRecord.vm"
outDir="D:\temp\NW\Model"
outExtensionName=".cs"
isInMeta ="0"
ns="NDOTest.Model"/>
<add
name="ndoActiveRecord2"
type="NDO.Tools.SimpleGenerator,NDO.Tools"
helper="NDO.Tools.NDOHelper,NDO.Tools"
outLanguage ="CSHARP"
templateName ="NDO.ActiveRecord2.vm"
outDir="D:\temp\NW\Model"
outExtensionName=".cs"
isInMeta ="0"
ns="NDOTest.Model"/>
<add
name="Test.Driver"
type="NDO.Tools.SimpleGenerator,NDO.Tools"
helper="NDO.Tools.NDOHelper,NDO.Tools"
outLanguage ="CSHARP"
templateName ="Test.Driver.vm"
outDir="D:\temp\NW\Model"
outExtensionName=".cs"
isInMeta ="0"
ns="NDOTest.Model"/>
</providers>
</generator>
</configuration>
在SimpleGenerator 命令对象中向 Velocity 引擎注入了一个 driver 对象,该驱动器对象实现了数据库元数据提供者接口,所以在任何一个模板文件中都可以自由自在的操作整个数据库的元数据。比如下面的 模板文件代码:

----------------------- Driver Info -------------------------------
Current ConnectionString :$driver.ConnectionString
Driver.NamedPrefix :$driver.NamedPrefix
Dialect.OpenQuote :$driver.Dialect.OpenQuote
Dialect.CloseQuote :$driver.Dialect.CloseQuote
#if ($driver.SupportsIdentitySelectInInsert)
Dialect.IdentitySelectString :$driver.Dialect.IdentitySelectString
#end
----------------------- End Driver Info ----------------------------




----------------------- All Tables -------------------------------
#set($sc = $driver.GetTableList())
#foreach($s in $sc)
$s
#set($cols = $driver.GetTableSchema($s).Columns)
#foreach($col in $cols)
$col.Name $col.ColumnType $col.DbType $col.Length
#end
#end
----------------------- End Tables -------------------------------




----------------------- All Views -------------------------------
#set($sc = $driver.GetViewList())
#foreach($s in $sc)
$s
#set($cols = $driver.GetViewSchema($s).Columns)
#foreach($col in $cols)
$col.Name $col.ColumnType $col.DbType $col.Length
#end
#end
----------------------- End Views -------------------------------




----------------------- All Procudures --------------------------
#set ($pss = $driver.GetSPList())
#foreach($ps in $pss)
$ps
#set($parameters = $driver.GetSPSchema($ps).Parameters)
#foreach($parameter in $parameters)
$parameter.Name $parameter.DbType $parameter.NativeType $parameter.Direction $parameter.Size
#end
#end
----------------------- End Procudures---------------------------
.NET 实体类的模板文件
using System;

namespace $ns
}
.NET 实体类的模板文件2 - 基于扩展"标签" Helper
using System;

namespace $ns
下面是几个GUI截图:



日志信息:

最后附上代码生成器原代码和新版本的NDO组件(增强了对视图的支持,以及非活动记录的单表ORM的支持)