2011-10-21 6 views
1

私は、私たちのプロジェクトのために、多くの厳しい操作と、データベースのための基本的なdataAccessオブジェクトを生成するコードジェネレータを作成しました。 (動的SQLを実行することは許可されておらず、ストアドプロシージャのみが許可されているため、他のツールは使用していません)。クラスの存在に基づいてコードを含めることは可能ですか?

今私が考えているのは、約1,200個のテーブルがあるということです。私はすべてのテーブルオブジェクトをプロジェクトに含めることは望ましくありません(実際に使用されるまでではありません)。

私のオブジェクトには、他のオブジェクト(親子関係など)を参照するプロパティが含まれています。

は今、私は誰もが現在ClassBのを使用していない、と私は私たちのプロジェクトに含めない(まだ)それので、知っている私は私の2つのオブジェクト(彼らは別のファイルにあります)

public class ClassA{ 
    public ClassB GetClassBforA{get;set;} 
    //Lost of other properties and code 
} 

public class ClassB{/* bunch of stuff*/} 

を持っていると言います他のクラスやツールへの参照が多数あります。 ClassAのプロパティをコンパイルしないようにしたいと思います。私はこの

public class ClassA{ 
    #if ClassBIsDefind 
    public ClassB GetClassBforA{get;set;} 
    #endif 
    //Lost of other properties and code 
} 


#define ClassBIsDefind 
public class ClassB{/* bunch of stuff*/} 

のように多分何かを考えていた。しかしClassBIsDefindは別のファイルに設定されているので、これは動作しません

(このファイルが自動的に生成されるので、上書きするバインドされています)。

これを行う別の方法はありますか?

+0

ReSharperが提供するLive T4 Templatesのような既存のフリーコード生成ツールを見てください。また、Visual Studioはテンプレート機能も備えています。ホイールを発明するよりも、再利用する価値があるかもしれません。 – sll

答えて

1

Visual Studioのプロジェクトプロパティページの[ビルド]タブで条件付きコードのコンパイルシンボルを定義するか、コマンドラインでコンパイラを呼び出す場合はコマンドラインスイッチで条件付きコードのコンパイルシンボルを定義できます。これらのシンボルは、すべてのファイルで使用できます。

+0

〜1200テーブルではむしろメンテナンスが難しくなります... – Oded

+0

フェア十分。私はちょうど "...これはClassBIsDefindが別のファイルに設定されているので動作しません"というOPのコメントに対処したいと思っていました。 – phoog

+0

これは可能な解決策ですが、私はそれが欲しいと思うほど簡単ではないようです(私はすべてが簡単にできるわけではありません)。 – XenoPuTtSs

1

であるテーブルのコードを生成するだけです。

+0

これは単なる答えかもしれません。私は "Object Is Used"タイプのリストを維持する必要がない方法を使うことができることを期待していました。 – XenoPuTtSs

0

Activator.CreateInstance()を呼び出して型を動的に読み込み、その型が存在しない場合に発生する例外をキャッチすることができます。

関連する問題