1

我已经翻遍了以前提出的问题,但没有找到重复的问题。我很想从 DB2 模式(使用 iSeries OLEDB 提供程序)在 .Net 中生成基本实体类。有什么简单的方法可以做到这一点吗?我研究了 MyGeneration 和 CodeSmith,似乎必须有一种更简单的方法。

提前致谢。

编辑 我正在取消 iSeries 的标签,希望它能让这个问题稍微减轻一点。有人对任何 ADO.Net 或 OLEDB 提供商使用过任何东西吗?我想我可以调整它以与 iSeries 一起工作。

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

4

3 回答 3

2

你试过吉夫斯吗?它是一个用 Perl 编写的模板驱动的代码生成器。

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

我没有做你想做的事,但我做了以下事情:

1) 使用 Jeeves 的分布式 OO 解析器,并在规范文件中创建我的对象定义,该文件采用该解析器可以读取的格式。2) 我对模板进行了编码,以使用 OO 解析器从我的规范文件生成的抽象语法树。3) 这反过来在 Perl 中生成一个代码生成器。我将此代码生成器称为预构建事件(在 VS 2005 中),并且生成的代码在当时和那里编译。

您必须构建您想要的模板(可能还有规范解析器),但是一旦您这样做了,您就可以准确地输出您想要的内容,而不会产生很多额外的开销。

于 2009-08-19T18:23:19.857 回答
1

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

您可能会发现生成的类装饰有您可能不需要的额外成员(它们经过编码,因此可以在需要时在组件模型上下文中使用),但您可以轻松地去除这些额外的人工制品。

于 2009-08-19T18:11:33.530 回答
0

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

也许这将有助于将来的某人。

于 2009-08-19T19:32:44.460 回答