4

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

以供参考

请简单看一下以下两个网址。

  1. Scott Hanselman - “ T4 代码生成 Visual Studio 最佳保密
  2. Visual Web Developer Team Blog - ASP.NET MVC 开发人员快速入门指南

我要实现的目标的简短描述

使用 T4 引擎基于 ADO.NET 实体框架模型的主键生成具有 Action 方法的 MVC 控制器类。

我现在拥有的

  1. MVC T4 模板文件(例如,Controller.tt、Create.tt 等)已包含在我的 MVC Web 项目中。
  2. 我在“模型”文件夹中有一个 ADO.NET 实体框架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 实体框架类中读取主键信息等,并为 EDIT、DETAILS、ADD 操作

生成基本的 CRUD 操作和方法签名......

我被困在哪里

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

我通过以下技术检索 [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 信息?

如果有人能在这个主题上帮助我,我将不胜感激,因为这将允许我为 ADD、EDIT、DETAILS 等的 MVC 控制器操作方法生成 75% 的代码以及基本的 CRUD 操作代码。

4

1 回答 1

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 模板的形式执行此操作。

于 2009-07-14T21:51:17.157 回答