我正在创建我自己的自定义 T4 模板,该模板与我的 MVC Web 应用程序中包含的 ADO.NET 实体框架模型(.edmx 文件)集成。
以供参考
请简单看一下以下两个网址。
- Scott Hanselman - “ T4 代码生成 Visual Studio 最佳保密”
- Visual Web Developer Team Blog - ASP.NET MVC 开发人员快速入门指南
我要实现的目标的简短描述
使用 T4 引擎基于 ADO.NET 实体框架模型的主键生成具有 Action 方法的 MVC 控制器类。
我现在拥有的
- MVC T4 模板文件(例如,Controller.tt、Create.tt 等)已包含在我的 MVC Web 项目中。
- 我在“模型”文件夹中有一个 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 库程序集中。
一些可以帮助我找到解决方案的事情
- 在哪里可以找到MvcTextTemplateHost类的源代码?如果我至少可以找到 DLL 文件,我大概可以查看代码如何加载在 Visual Studio “添加视图”对话框窗口中输入的类型信息。
- 有没有办法通过 Visual Studio IDE API 从我的 T4 模板动态检索 Visual Studio 项目中包含的类的 System.Type 信息?
如果有人能在这个主题上帮助我,我将不胜感激,因为这将允许我为 ADD、EDIT、DETAILS 等的 MVC 控制器操作方法生成 75% 的代码以及基本的 CRUD 操作代码。