You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Entity Framework的TT模板中添加自定义ToString()方法

解决TT模板生成实体类自动重写ToString()的方案

一、模板中添加代码的位置

找到TT模板里负责生成类主体的方法,一般是名为WriteClass的方法(签名大概是<#+ void WriteClass(string namespaceName, CodeTypeDeclaration type) { #>),在这个方法里,等所有属性的生成代码写完之后、类的闭合大括号之前,插入ToString()方法的生成逻辑。

二、具体添加的模板代码

直接插入以下模板代码块,它会遍历当前类的所有属性,生成硬编码的ToString()实现:

public override string ToString()
{
    return string.Join("; ", 
        <#
        var properties = type.Members.OfType<CodePropertyDeclaration>().ToList();
        for (int i = 0; i < properties.Count; i++)
        {
            var prop = properties[i];
            Write($"nameof({prop.Name}) = {prop.Name}?.ToString() ?? string.Empty");
            if (i != properties.Count - 1)
            {
                Write(", ");
            }
        }
        #>
    );
}

三、更优实现方案

有两种方向可选:

  • 编译期硬编码(推荐):上面的模板生成方式已经很优,它在编译时就把属性名和取值逻辑写死,运行时没有额外开销,还能享受IDE的语法检查。
  • 运行时反射(简洁但性能稍弱):如果追求模板代码更简洁,可以用反射实现,但运行时会有轻微性能损耗,适合非性能敏感场景:
public override string ToString()
{
    return string.Join("; ", 
        typeof(<#= type.Name #>).GetProperties()
            .Select(p => $"{p.Name} = {p.GetValue(this)?.ToString() ?? string.Empty}")
    );
}

内容的提问来源于stack exchange,提问作者Vya4slav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:52:07