1

私は以前に尋ねられた質問を掘り下げましたが、重複を見つけることができませんでした。DB2スキーマから(iSeries OLEDBプロバイダーを使用して).Netで基本的なエンティティークラスを生成したいと思います。これを行う簡単な方法はありますか?MyGenerationとCodeSmithを調べましたが、もっと簡単な方法があるはずです。

前もって感謝します。

編集 私はiSeriesタグをこれから外して、質問のスカリフィケーションを少し減らすことを期待しています。ADO.NetまたはOLEDBプロバイダーに対して使用したものはありますか?私はそれをiSeriesで動作するように適応させることができたと思います。

編集#2 iSeriesタグを再び追加すると、数日以内に私自身の回答が受け入れられます。これが将来誰かに役立つことを願っています。レスポンダーに+1、ありがとう。

4

3 に答える 3

2

Jeevesを試しましたか?Perl で書かれたテンプレート駆動型のコード ジェネレーターです。

Jeeves を使用すると、仕様パーサーとテンプレートを個別に変更し、Perl コマンドをテンプレートに挿入できます。

私はあなたがやりたいことを正確にはしませんでしたが、私がしたことは次のとおりです。

1) Jeeves の as-distributed OO パーサーを使用し、このパーサーが読み取れる形式の仕様ファイルにオブジェクト定義を作成しました。2) OO パーサーが仕様ファイルから生成した抽象構文ツリーを使用するようにテンプレートをコーディングしました。3) これにより、Perl でコード ジェネレーターが生成されます。私はこのコード ジェネレーターを pre-buld イベント (VS 2005) として呼び出し、生成されたコードはその場でコンパイルされました。

必要なテンプレート (およびおそらくスペック パーサー) を作成する必要がありますが、一度作成すると、追加のオーバーヘッドをあまりかけずに、必要なものを正確に出力できます。

于 2009-08-19T18:23:19.857 に答える
1

これはおそらく少し長くなりますが、1 つの方法は、 NORMA VS プラグインを使用してスキーマをオブジェクト ロール モデリング図にリバース エンジニアリングし、プラグインに付属の PLiX ジェネレーターを介して .NET クラスを生成することです。

結果のクラスは、必要のない余分なメンバーで装飾されている場合があります (必要に応じてコンポーネント モデル コンテキストで使用できるようにコード化されています) が、これらの余分なアーティファクトは簡単に取り除くことができます。

于 2009-08-19T18:11:33.530 に答える
0

さらに調査した結果、コード ジェネレーターを自分で作成することにしました。私が質問した理由の 1 つは、.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 に答える