如何使用从解决方案中现有基类继承的 T4 模板生成类?

Posted

技术标签:

【中文标题】如何使用从解决方案中现有基类继承的 T4 模板生成类?【英文标题】:How to produce a class using T4 template that inherits from an existing base class in the solution? 【发布时间】:2020-12-10 03:17:07 【问题描述】:

我有一个抽象的枚举类,我想在 T4 模板中继承它。抽象类设置类结构。它还从数据库中提取值。

例如,这是我希望 T4 生成的:

public class Region : Enumeration

  
    public static readonly Region Northeast = new Region(1, "Northeast", "1.jpg");
    public static readonly Region Midwest = new Region(2, "Midwest", "2.jpg");
    public static readonly Region South = new Region(3, "South", "3.jgp");
    public static readonly Region West = new Region(4, "West","4.jpg");
    public Region(int id, string name, string imageName)
        : base(id, name, imageName)
    
    

这是我的第一个 T4 模板,所以我在这里做一些假设。如果我正确理解了这个过程,我必须在模板中创建代码来遍历值列表并输出文本,在本例中:“public static readonly Region Northeast = new Region(1, "Northeast", "1 .jpg");"列表中的每个值。

我的问题是,我是否应该将获取 db 值的代码放在 Features 函数中,调用该函数然后在 T4 模板的代码块中进行迭代?另外我假设要写出文本,需要写的文本放在代码块之前/之后?

提前致谢

【问题讨论】:

能否请您发布您目前编写 t4 模板的尝试? 【参考方案1】:

阅读 T4 模板后,我能够回答自己的问题。 这是我的模板:

行:IList 区域 = WebAPIMVC.APIClasses.ApplicationSetup.GetRegions();

使用以下方法从数据库中检索数据:

注意:我在这里使用的是 EF6,无法像通常那样创建上下文。必须使用嵌入在代码中的连接字符串来创建上下文,因为无法访问 Web 配置。然后我调用了数据库并返回了一个对象列表。

模板遍历对象并创建所需的代码行。我最终得到了我需要的东西:

【讨论】:

感谢您发布自己的解决方案。你摇滚。

以上是关于如何使用从解决方案中现有基类继承的 T4 模板生成类?的主要内容,如果未能解决你的问题,请参考以下文章

为什么使用T4修改EF中的实体?

有人知道任何用于从 xsd 生成类的 T4 模板吗?

T4模板:将现有文件转换为运行时模板

如何从 PowerShell 脚本触发 T4 模板

如何在 T4 模板中使用 DbContext?

我们如何让 T4 模板根据用户正在编辑的 .cs 文件生成代码?