MVC T4 MvcTextTemplateHost和自定义“控制器”T4模板

时间:2009-07-14 20:58:18

标签: asp.net-mvc visual-studio entity-framework t4 vsx

我正在创建自己的自定义T4模板,该模板与我的MVC Web应用程序中包含的ADO.NET实体框架模型(.edmx文件)集成。

供参考

请简要了解以下两个网址。

  1. Scott Hanselman - “T4 Code Generation Visual Studio Best Kept Secret
  2. Visual Web Developer团队博客 - ASP.NET MVC开发人员快速入门指南
  3. 我想要实现的内容的简短描述

    使用T4引擎根据ADO.NET实体框架模型的主键生成带有Action方法的MVC Controller类。

    我现在拥有的东西

    1. MVC T4模板文件(例如,Controller.tt,Create.tt等等)已作为我的MVC Web项目的一部分包含在内。
    2. 我在“模型”文件夹中有一个ADO.NET实体框架 MyModel.edmx文件
    3. 根据控制器名称(例如“ProductController”),我想检索“产品”的 [System.Type] 信息 class。 我希望能够以与MVC View T4文件(例如Edit.tt)相同的方式检索 System.Type 信息,如下所示。

      MvcTextTemplateHost mvcHost = (MvcTextTemplateHost) (Host);
      Type type = mvcHost.ViewDataType;
      

      最终目标

      我想创建Controller方法代码生成,以通过反射从ADO.NET实体框架类中读取主键信息等
      为EDIT,DETAILS,ADD操作等生成基本的CRUD操作和方法签名......

      我被困的地方

      但是,正如您可以从 ASP.NET MVC开发人员快速入门指南一文中看到的那样,我无法为控制器检索 [System.Type] T4模板,因为 MvcTextTemplateHost 类仅公开 ViewDataType 属性以创建MVC视图。

      我尝试通过以下技术检索[System.Type]是行不通的,因为 modelType 被返回为 null ,这意味着它无法找到类型

      Type modelType = Type.GetType(modelFullyQualifiedName, false, true);
      

      我假设发生这种情况是因为实体框架模型作为我的MVC Web项目的一部分包含在内,不包含在已编译的.DLL库程序集中。

      有助于我找到解决方案的一些事情

      1. 我在哪里可以找到 MvcTextTemplateHost 类的源代码?如果我至少可以找到DLL文件,我可以查看代码如何加载在Visual Studio “添加视图”对话框窗口中输入的类型信息
      2. 有没有办法通过Visual Studio IDE API从我的T4模板动态检索Visual Studio项目中包含的类的System.Type信息?
      3. 如果有人能帮助我解决这个问题,我将非常感激,因为这将允许我为ADD,EDIT,DETAILS等MVC控制器操作方法生成75%的代码。以及基本的CRUD操作代码。

1 个答案:

答案 0 :(得分:6)

  1. 您可以使用Reflector从C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ Microsoft.VisualStudio.Web.Extensions.dll程序集中反编译MvcTextTemplateHost的源代码。

  2. 是的,您可以使用CodeModel从Visual Studio加载类型元数据。但是,您最好直接从edmx文件中读取它。无论哪种方式,这都是一项重大任务。在VS 2010中,可能有一个如何以EF T4模板的形式执行此操作的可用示例。