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 模板 的相关文章

  • 从另一台设备访问 Azure 模拟器

    我有两个不同的项目 Windows Phone 8 应用程序 我正在真实的物理开发设备上运行 Azure 云服务 其中包含一个简单的 WebRole 端点 其中包含 ASP NET MVC WebAPI 我的目标很简单 使用从真实设备运行的
  • .Net Standard项目,如何使用System.ServiceModel类

    我已将 PCL 项目转换为 Net Standard 1 5 项目 我已经从 nuget 安装了 System ServiceModel 包 但找不到使用 System ServiceModel 命名空间的方法 任何帮助表示赞赏 安装 Sy
  • 获取当前操作和控制器并将其用作 Html.ActionLink 中的变量?

    我需要能够动态检索您所在页面的当前操作和控制器名称 并实际使用它们创建一个新的 HTML ActionLink 链接到相同的操作和控制器名称 但位于不同的区域 所以我想我需要检索当前操作和控制器名称作为变量以用于构建新的 HTML Acti
  • 实体框架中的实体图是什么?

    我一直在研究一些实体框架教程 并且遇到了这个词实体图 我对这个术语及其用法还没有清楚的了解 任何人都可以提供有关此主题的信息 例如它是什么及其在实体框架上下文中的用途 当实例化的对象以某种关系连接在一起时 它们被称为 图或实体图 实体框架有
  • 返回带有列表对象的列表对象

    我有三个表 汽车品牌 汽车型号 和 CarsandModel 我有 Carsand 模型表 因为一个模型可以由多个制造商构建 我想返回包含汽车型号列表的汽车品牌列表 我现在的长篇大论不是过滤汽车型号的汽车制造商列表 我尝试添加一个 wher
  • 使用 Visual Studio 调试器在值更改时中断

    有没有办法在变量上放置监视 并且仅在该值发生变化时让 Visual Studio 中断 这将使发现棘手的国家问题变得更加容易 这可以做到吗 断点条件仍然需要设置断点 我宁愿设置一个监视并让 Visual Studio 在状态更改时设置断点
  • 当我在纯 EF4 代码中具有一对多映射时,可以隐藏 ICollection 字段吗?

    我的具有一对多映射的域类通常采用以下形式 未经测试的代码 public Customer Customer Public methods public Order AddOrder Order order orders Add order
  • Visual Studio 2013 及更高版本的 Windows 菜单中缺少新的垂直选项卡组?

    我刚刚迁移到 Visual Studio 2013 找不到垂直分割代码窗口的方法 因此我并排有两个不同的文件 在以前的版本中 我可以创建一个新窗口 然后通过选择将其移动到新选项卡创建新的垂直选项卡组从 Windows 菜单 现在我只看到创建
  • 在 CSHTML 页面中实现 switch 语句

    我正在尝试做一些不同的事情 我有一个包含 ID 的视图 根据 Id 的值 我想更改显示的标题 就像是 switch id case test h1 Test Site h1 case prod h1 Prod Site h1 break 我
  • Visual Studio 中的项目不可信?

    打开最近下载的项目时 Visual Studio 2013 会简短警告您仅打开来自可靠来源的项目 开设项目有哪些风险 项目在编译之前会对您的系统造成任何损害吗 可能会造成什么损害 在实际从 不可信 来源打开项目之前 您应该注意哪些指标 不是
  • 下载 .NET 3.5 的实体框架

    哪个版本的实体框架 EF 我可以用在 NET 3 5我可以在哪里下载这个旧版本 对于 Net 3 5 您可以使用 EF v1 您是否尝试从以下位置下载 Microsoft NET Framework 3 5 Service Pack 1 h
  • 是什么原因导致 Linq 错误:此方法无法转换为存储表达式?

    我有一堆具有相同 select 语句的 Linq to Entity 方法 所以我想我会很聪明 并将其分离到它自己的方法中以减少冗余 但是当我尝试运行代码时 我得到了以下内容错误 该方法不能转化为 商店表达式 这是我创建的方法 public
  • 如何在 Visual Studio 2017 中更改 Ctrl+C 以复制 Word,而不是整行

    这个问题类似于在 Visual Studio 中禁用单行复制 https stackoverflow com questions 108094 disabling single line copy in visual studio 除了我想
  • 从 MVC 控制器操作调用 javascript

    我可以调用 javascript 函数吗MVC 控制器动作 不是来自视图页面 并获取返回值 如何 我需要向服务器发出请求来自代码 cs 像这里一样使用 javascript 但这是aspx页面 function getInitData va
  • 如何在 MVC3 Razor 视图中呈现数据表

    我在 xls 电子表格 1 之间有一个可靠且经过测试的导入方法 该方法返回DataTable 我已将其定位在我的服务层中 而不是数据中 因为只有工作簿作为上传文件保存 但现在我想知道在哪里以及如何生成此内容的 HTML 表示形式DataTa
  • 如何从asp net core中的AuthorizationFilter重定向到登录页面?

    当我回来时ForbidResult 它重定向到AccessDenied启动时指定的页面 我想做同样的事情UnauthorizedResult 但重定向到Login page P S 我没有使用标准Authorize控制器中的属性我有自己的
  • jQuery UI 对话框 + 验证

    我在单击 保存 后使用 Jquery Validate 验证 jQuery UI 对话框时遇到问题 这是我创建 Jquery 对话框的代码 它从目标 href URL 加载对话框 document ready dialogForms fun
  • Visual Basic - 未将对象引用设置为对象的实例

    我在 VB Net 中收到以下错误 你调用的对象是空的 它在 For 循环末尾突出显示 Next 任何帮助都会很棒 Imports System IO Public Class LoginForm Dim Username As Strin
  • SignalR 似乎正在减慢我的 MVC/Azure 应用程序的启动速度

    我有一个 MVC 应用程序在 Windows Azure 上的 WebRole 上的 NET 4 5 下运行 使用 SignalR 1 0 alpha2 并使用 ServiceBus 底板 在我的 App Start 文件夹中 我有 Reg
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow

随机推荐