MVC Web アプリケーションに含まれる ADO.NET Entity Framework モデル (.edmx ファイル) と統合する独自のカスタム T4 テンプレートを作成しています。
参考のため
以下の 2 つの URL を参照してください。
- Scott Hanselman - 「T4 コード生成 Visual Studio の最高の秘密」
- Visual Web 開発者チームのブログ - ASP.NET MVC 開発者向けクイック スタート ガイド
私が達成しようとしていることの簡単な説明
T4 エンジンを使用して、ADO.NET Entity Framework モデルの主キーに基づくアクション メソッドを含む MVC コントローラー クラスを生成します。
私が今持っているもの
- MVC T4 テンプレート ファイル(Controller.tt、Create.tt など)は、MVC Web プロジェクトの一部として含まれています。
- " Models " フォルダーにADO.NET Entity Framework MyModel.edmx ファイルがあります。
コントローラー名(例: "ProductController")に基づいて、ADO.NET Entity Framework モデルから"Product"クラスの[System.Type]情報を取得したいと考えています。以下のように、MVC View T4 ファイル(Edit.tt など)と同じ方法でSystem.Type情報を取得できるようにしたいと考えています。
MvcTextTemplateHost mvcHost = (MvcTextTemplateHost) (Host);
Type type = mvcHost.ViewDataType;
最終目標
リフレクションを
介して ADO.NET Entity Framework クラスから主キー情報などを読み取り
、EDIT、DETAILS、ADD 操作などの基本的な CRUD 操作とメソッド シグネチャを生成するためのコントローラー メソッド コード生成を作成したいと考えています。
私が立ち往生している場所
ただし、ASP.NET MVC 開発者向けクイック スタート ガイドの記事からわかるように、 MvcTextTemplateHostクラスはMVC ビューを作成するための ViewDataType プロパティのみを公開するため、コントローラーT4 テンプレートの[System.Type]を取得できません。
modelTypeがnullとして返されているため、次の手法で [System.Type] を取得しようとしても機能しません。つまり、型が見つかりません。
Type modelType = Type.GetType(modelFullyQualifiedName, false, true);
これは、Entity Framework Model が MVC Web プロジェクトの一部として含まれており、コンパイル済みの .DLL ライブラリ アセンブリの一部として含まれていないために発生すると想定しています。
解決策を見つけるのに役立ついくつかのこと
- MvcTextTemplateHostクラスのソース コードはどこにありますか? 少なくとも DLL ファイルを見つけることができれば、コードが Visual Studio の[ビューの追加] ダイアログ ウィンドウに入力されたタイプ情報をどのようにロードするかを調べることができます。
- Visual Studio プロジェクトに含まれるクラスの System.Type 情報を、Visual Studio IDE API を介して T4 テンプレートから動的に取得する方法はありますか?
これにより、ADD、EDIT、DETAILS などの MVC コントローラー アクション メソッドのコードの 75% と基本的な CRUD 操作コードを生成できるようになるため、このトピックについて誰かが私を助けてくれれば本当にありがたいです。