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

2024-05-01

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

以供参考

请简单浏览一下以下两个网址。

  1. 斯科特·汉塞尔曼——”T4 代码生成 Visual Studio 最保守的秘密 http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx"
  2. Visual Web 开发人员团队博客 - ASP.NET MVC 开发人员快速入门指南

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

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

我现在拥有的

  1. MVC T4 模板文件(例如,Controller.tt、Create.tt 等...)已包含在我的 MVC Web 项目中。
  2. 我有一个 ADO.NET 实体框架MyModel.edmx 文件在里面 ”Models“ 文件夹。

基于控制器名称(例如“产品控制器”),我想检索[系统类型]的信息“产品”ADO.NET 实体框架模型中的类。 我希望能够检索系统类型信息与 MVC View T4 文件相同(例如编辑.tt)如下。

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

最终目标

我想创建控制器方法代码生成以通过反射从 ADO.NET 实体框架类读取主键信息等
and
为编辑、详细信息、添加操作等生成基本的 CRUD 操作和方法签名...

我被困在哪里

然而,正如你所看到的ASP.NET MVC 开发人员快速入门指南文章,我无法检索[系统类型] for 控制器T4 模板因为MvcTextTemplateHost类仅公开视图数据类型用于创建 MVC 视图的属性。

我尝试通过以下技术检索 [System.Type] 不起作用,因为型号类型被返回为null意味着它找不到类型。

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

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

一些可以帮助我找到解决方案的事情

  1. 我在哪里可以找到源代码MvcTextTemplateHost班级?如果我至少能找到 DLL 文件,我也许可以看看代码如何加载 Visual Studio 中输入的类型信息“添加视图”对话框窗口.
  2. 有没有办法通过 Visual Studio IDE API 从我的 T4 模板动态检索 Visual Studio 项目中包含的类的 System.Type 信息?

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


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

  2. 是的,您可以使用以下方式从 Visual Studio 加载类型元数据代码模型 http://msdn.microsoft.com/en-us/library/envdte.codemodel.aspx。但是,您最好直接从 edmx 文件中读取它。不管怎样,这都是一项艰巨的任务。 VS 2010 中可能有一个以 EF T4 模板形式执行此操作的可用示例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC T4 MvcTextTemplateHost 和定制的“控制器”T4 模板 的相关文章

随机推荐