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

stu*_*tun 4 asp.net-mvc t4 vsx entity-framework visual-studio

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

以供参考

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

  1. Scott Hanselman - " T4 Code Generation Visual Studio Best Kept Secret "
  2. Visual Web Developer团队博客 - ASP.NET MVC开发人员快速入门指南

简要说明我想要实现的目标

使用T4引擎使用基于ADO.NET实体框架模型的主键的Action方法生成MVC Controller类.

我现在拥有什么

  1. MVC T4模板文件(例如,Controller.tt,Create.tt等...)已作为我的MVC Web项目的一部分包含在内.
  2. 我在" Models "文件夹中有一个ADO.NET Entity Framework MyModel.edmx文件.

基于Controller名称(例如"ProductController"),我想从ADO.NET Entity Framework模型中检索"Product"类的[System.Type]信息.我希望能够以与MVC View T4文件(例如Edit.tt)相同的方式检索System.Type信息,如下所示.

MvcTextTemplateHost mvcHost = (MvcTextTemplateHost) (Host);
Type type = mvcHost.ViewDataType;
Run Code Online (Sandbox Code Playgroud)

最终目标

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

我被困在哪里

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

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

Type modelType = Type.GetType(modelFullyQualifiedName, false, true);
Run Code Online (Sandbox Code Playgroud)

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

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

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

我真的很感激,如果有人可以帮助我这个主题,因为这将允许我为ADD,EDIT,DETAILS等MVC控制器操作方法生成75%的代码和基本的CRUD操作代码.

Ole*_*ych 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模板的形式执行此操作的示例.