2010-05-31 30 views
3

我使用T4生成一些类定义,并发现我的字段名称前面出现下划线。T4 FieldName在没有Underscore的camelCase中?

我已经设置

code.CamelCaseFields = true; 

只要是安全的(虽然我知道这是默认的),但仍落得_myField而非MyField的。

如何生成不带'_'字符的字段名称?

另外,T4的文档在哪里?我发现了很多资源,如

Code Generation and Text Templates和许多博客,但我还没有找到按类逐个财产的文档。

回答

3

您可能正在谈论EF4自追踪实体。 CodeGenerationTools类包含在<#@ include file="EF.Utility.CS.ttinclude"#>指令中,您可以在“[VSInstallDir] \ Common7 \ IDE \ Extensions \ Microsoft \ Entity Framework Tools \ Templates \ Includes \ EF.Utility.CS.ttinclude”中找到该指令。

fieldName的函数被定义为这样:

private string FieldName(string name) 
{ 
    if (CamelCaseFields) 
    { 
    return "_" + CamelCase(name); 
    } 
    else 
    { 
    return "_" + name; 
    } 
} 

的 “_” 是在函数硬编码。编码你自己应该不难。请注意,CodeGenerationTools类特定于此ttinclude文件,并不是在T4中生成代码的通用嵌入方式。

2

我已经写了下面的方法来使第一个字符大写,删除空格/下划线,并使下一个字符大写。见下面的示例。随意使用。

private string CodeName(string name) 
{ 
    name = name.ToLowerInvariant(); 

    string result = name; 
    bool upperCase = false; 

    result = string.Empty; 
    for (int i = 0; i < name.Length; i++) 
    { 
     if (name[i] == ' ' || name[i] == '_') 
     { 
      upperCase = true; 
     } 
     else 
     { 
      if (i == 0 || upperCase) 
      { 
       result += name[i].ToString().ToUpperInvariant(); 
       upperCase = false; 
      } 
      else 
      { 
       result += name[i]; 
      } 
     } 
    } 

    return result; 
} 

输入/输出样本: FIRST_NAME =姓, ID =标识, 状态消息= StatusMessage

0

这是很好的建议但它并不能帮助你知道哪里是合适的地方放这样的功能是...

是否有任何关于分解EF .tt文件或逐步浏览输出代以了解它如何构建输出的指导?

我可以将其插入一个名为 (Ef4.3)函数

公共字符串属性(EdmProperty edmProperty)

这似乎是用来输出线成功使用上述功能像“公众诠释字段名{获得;设置;}”

,改变了3日(指数{2})参数的格式化与功能包修改名称,如:

_typeMapper.GetTypeName(edmProperty.TypeUsage), //unchanged 
UnderScoreToPascalCase(_code.Escape(edmProperty)), //wrapped "name" 
_code.SpaceAfter(Accessibility.ForGetter(edmProperty)), // unchanged 

这是不完美的,例如:它不保留现有的“Ucasing”,并不关心这样的事情: customerIP 输出:Customerip 其中IMO不太可读...

但它比我看什么更好,这是一场噩梦,因为数据库被camelCase,PascalCase和下划线分离混杂在一起,所以非常可怕。

无论如何希望这可以帮助别人......

相关问题