首页 > 技术文章 > 自定义T4模板去掉实体对象中的下划线

xiaoxiangfeizi 2014-02-06 20:33 原文

        在EF Power Tool 默认使用的T4模板中,如果数据库表有下划线,那么生成的实体也有下划线,但是我们实际使用的过程中,是不希望有下划线的,要解决这个问题,可以自定义这个T4模板,把生成的实体中的下划线去掉。具体的方法是:

         1、首先通过菜单生成默认的T4模板:

image

         生成的模板如下:

image

       2、在Entity.tt中加上一个类代码块,具体的语法参见T4模板的语法,添加代码如下:

<#+
//获取类名
string GetClassName(string tableName)
{
return GetClassName(tableName,"");
}
 
//获取类名
string GetClassName(string tableName,string lastStr)
{
string[] name = tableName.Split('_');
string className = tableName;
if(name.Length > 0)
{
className = name[name.Length - 1];
}
 
return className + lastStr;
}
#>
        然后找到相应的调用的地方,调用一下GetClassName方法即可。
       调用的方法是类似于下面这样的:
foreach (var navProperty in efHost.EntityType.NavigationProperties.Where(np => np.DeclaringType == efHost.EntityType))
{
    if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many)
    {
 
    public virtual ICollection<<#= GetClassName(code.Escape(navProperty.ToEndMember.GetEntityType())) #>> <#= GetClassName(code.Escape(navProperty),"Entity") #> { get; set; }
 
    }
    else
    {
 
    public virtual <#= GetClassName(code.Escape(navProperty.ToEndMember.GetEntityType())) #> <#= GetClassName(code.Escape(navProperty),"Entity") #> { get; set; }
 
    }
}

        然后重新生成代码,就可以了。

        使用EF Power Tools生成代码,还有一个问题没有解决,那就是生成的实体文件名,还是跟表名一样;如果表名中有下划线,那么实体类名也有下划线,不知道在哪里面修改这个文件的名称,让它没有下划线。如果有知道的同学,请告诉一声。

推荐阅读