我正在创建自己的自定义T4模板,该模板与我的MVC Web应用程序中包含的ADO.NET实体框架模型(.edmx文件)集成。
请简要了解以下两个网址。
使用T4引擎根据ADO.NET实体框架模型的主键生成带有Action方法的MVC Controller类。
根据控制器名称(例如“ProductController”),我想检索“产品”的 [System.Type] 信息来自ADO.NET Entity Framework模型的strong> 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库程序集中。
如果有人能帮助我解决这个问题,我将非常感激,因为这将允许我为ADD,EDIT,DETAILS等MVC控制器操作方法生成75%的代码。以及基本的CRUD操作代码。
答案 0 :(得分:6)
您可以使用Reflector从C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ Microsoft.VisualStudio.Web.Extensions.dll程序集中反编译MvcTextTemplateHost的源代码。
是的,您可以使用CodeModel从Visual Studio加载类型元数据。但是,您最好直接从edmx文件中读取它。无论哪种方式,这都是一项重大任务。在VS 2010中,可能有一个如何以EF T4模板的形式执行此操作的可用示例。