asp.net-mvc - MVC T4 MvcTextTemplateHost 和自定义 "Controller"T4 模板

标签 asp.net-mvc visual-studio entity-framework t4 vsx

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

以供引用

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

  • 斯科特·汉塞尔曼-“T4 Code Generation Visual Studio Best Kept Secret
  • Visual Web 开发人员团队博客 - ASP.NET MVC 开发人员快速入门指南

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

    使用 T4 引擎基于 ADO.NET Entity Framework 模型的主键生成具有 Action 方法的 MVC Controller 类。

    我现在拥有的
  • MVC T4 模板文件 (例如,Controller.tt、Create.tt 等...)已包含在我的 MVC Web 项目中。
  • 我有一个 ADO.NET Entity Framework MyModel.edmx 文件 在“ 模型 ”文件夹中。

  • 基于 Controller 名称 (例如“ProductController”) ,我想检索 [系统类型] 的信息《产品》 ADO.NET Entity Framework 模型中的类。
    我希望能够检索 系统类型 信息与 MVC 查看 T4 文件的方式相同 (例如 Edit.tt)如下。
    MvcTextTemplateHost mvcHost = (MvcTextTemplateHost) (Host);
    Type type = mvcHost.ViewDataType;
    

    最终目标

    我想创建 Controller 方法代码生成以通过反射从 ADO.NET Entity Framework 类中读取主键信息等

    为 EDIT、DETAILS、ADD 操作等生成基本的 CRUD 操作和方法签名...

    我被困在哪里

    但是,正如您从 中看到的那样ASP.NET MVC 开发人员快速入门指南 文章,我无法检索 [系统类型] 对于 Controller T4 模板因为 MvcTextTemplateHost 类仅公开 查看数据类型 用于创建 MVC View 的属性。

    我尝试通过以下技术检索 [System.Type] 不起作用,因为 型号返回为 意味着它找不到类型。
    Type modelType = Type.GetType(modelFullyQualifiedName, false, true);
    

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

    一些可以帮助我找到解决方案的事情
  • 我在哪里可以找到 的源代码MvcTextTemplateHost 类(class)?如果我至少能找到 DLL 文件,我大概可以看看代码如何加载在 Visual Studio 中输入的类型信息。 “添加 View ”对话框窗口 .
  • 有没有办法通过 Visual Studio IDE API 从我的 T4 模板中动态检索 Visual Studio 项目中包含的类的 System.Type 信息?

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

    最佳答案

  • 您可以使用 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 模板的形式执行此操作。
  • 关于asp.net-mvc - MVC T4 MvcTextTemplateHost 和自定义 "Controller"T4 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1128003/

    相关文章:

    c# - 在 MVC 中上传文件时,字符串或二进制数据将被截断

    c# - 来自引用的 .NET Standard 项目的多个 DLL

    c# - Visual Studio Intellisense 显示 "new expression can be simplified",但构建失败

    entity-framework - EF 5. “Automatic migration was not applied because it would result in data loss”-仅更改了列名

    asp.net-mvc - 为服务层设计 DI(构造函数注入(inject))存储库

    c# - Entity Framework /Azure Web服务模型设计

    c# - 如何解析类型为 'IdentityServer4.EntityFramework.Options.OperationalStoreOptions' 的服务

    visual-studio - 是否可以在 Visual Studio 解决方案中引用不同的 NuGet 包版本?

    c# - 为什么 EF 5.x 对表使用复数名称?

    entity-framework - MVC 6 (Visual Studio 2015) 中缺少 microsoft.data.entity