【问题标题】:Class generation from database schema从数据库模式生成类
【发布时间】:2009-08-20 03:34:59
【问题描述】:

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

提前致谢。

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

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

【问题讨论】:

    标签: .net code-generation ibm-midrange


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        经过更多研究,我决定自己编写代码生成器。我问的部分原因是因为 .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;
        

        也许这会对将来的某人有所帮助。

        【讨论】:

        • 这可能会产生模式数据,但它是如何产生 C# 类定义的呢?难道你不想生成 get 和 put 方法来从数据库中获取行吗?
        猜你喜欢
        • 2011-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-01
        • 2010-11-20
        • 1970-01-01
        • 1970-01-01
        • 2011-03-23
        相关资源
        最近更新 更多