从数据库模式生成类

时间:2009-08-19 17:01:12

标签: .net code-generation ibm-midrange

我已经通过之前提出的问题进行了挖掘,并且没有找到重复的运气。我希望从DB2模式(使用iSeries OLEDB提供程序)生成.Net中的基本实体类。有没有简单的方法来做到这一点?我已经研究过MyGeneration和CodeSmith,看起来似乎必须有一个更简单的方法。

提前致谢。

修改 我正在接受iSeries标签,希望它能够解决这个问题。任何人都有任何他们用过任何ADO.Net或OLEDB提供商的东西?我想我可以让它适应iSeries。

编辑#2 重新添加iSeries标签并在几天内接受我自己的答案,希望这将有助于将来的某些人。给响应者+1,谢谢。

3 个答案:

答案 0 :(得分:2)

你试过Jeeves吗?它是用Perl编写的模板驱动的代码生成器。

使用Jeeves,您可以单独修改规范解析器和模板,并将Perl命令注入模板。

我没有做你想做的事,但我做的是以下内容:

1)使用Jeeves的as-distributed OO解析器,并在规范文件中创建我的对象定义,该文件的格式是该解析器可以读取的。 2)我将模板编码为使用OO解析器从我的规范文件生成的抽象语法树。 3)这反过来在Perl中生成代码生成器。我把这个代码生成器称为pre-buld事件(在VS 2005中),生成的代码就在那时编译。

你必须构建你想要的模板(可能还有spec解析器),但是一旦你这样做,你就可以输出你想要的东西,而不需要额外的开销。

答案 1 :(得分:1)

这可能有点冗长,但一种方法是使用NORMA VS plug in将模式反向工程为对象角色建模图,然后通过插件附带的PLiX生成器生成.NET类

您可能会发现结果类使用了您可能不需要的额外成员(它们经过编码以便在需要时可以在组件模型上下文中使用)进行修饰,但您可以轻松地去除这些额外的文物。

答案 2 :(得分:0)

经过更多的研究,我决定自己编写代码生成器。我问的部分原因是因为.Net的iSeries提供程序不是很健壮,所以没有给定方法来枚举模式信息。但是,在找到this question之后,我能够使用简单的内联SQL这样做:

//Enumerate schema tables (excludes views)
select table_name from qsys2.tables where table_schema = 'schema_name' and table_type = 'BASE TABLE'

//Enumerate table columns
select * from qsys2.columns where table_schema = 'schema_name' and table_name = 'table_name' order by ordinal_position;

也许这将有助于将来。