2010-05-31 63 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和下劃線分離混雜在一起,所以非常可怕。

無論如何希望這可以幫助別人......

相關問題