在EF Power Tool 默认使用的T4模板中,如果数据库表有下划线,那么生成的实体也有下划线,但是我们实际使用的过程中,是不希望有下划线的,要解决这个问题,可以自定义这个T4模板,把生成的实体中的下划线去掉。具体的方法是:
1、首先通过菜单生成默认的T4模板:
生成的模板如下:
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生成代码,还有一个问题没有解决,那就是生成的实体文件名,还是跟表名一样;如果表名中有下划线,那么实体类名也有下划线,不知道在哪里面修改这个文件的名称,让它没有下划线。如果有知道的同学,请告诉一声。