Domanda

sto usando T4 per generare alcune definizioni di classe e scoprire che sto ricevendo una sottolineatura di fronte ai miei nomi dei campi.

Ho impostato

code.CamelCaseFields = true;

giusto per essere sicuri (anche se capisco che è il default), ma ancora alla fine con _myField piuttosto che myField.

Come faccio a generare un nome di campo senza il '_' personaggio?

Inoltre, dove si trova la documentazione per T4? Sto trovando un sacco di risorse come ad esempio

Generazione di codice e modelli di testo e numerosi blog, ma non ho trovato la documentazione di classe-by-class, proprietà-by-proprietà.

È stato utile?

Soluzione

Probabilmente stai parlando di entità EF4 Auto monitoraggio. La classe CodeGenerationTools è incluso tramite la direttiva <#@ include file="EF.Utility.CS.ttinclude"#>, che potete trovare in "[VSInstallDir] \ Common7 \ IDE \ Extensions \ Microsoft \ Entity Framework Tools \ Templates \ Include \ EF.Utility.CS.ttinclude".

La funzione FieldName è definita come tale:

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

Il "_" è hardcoded nella funzione. Coding proprio non dovrebbe essere difficile. Nota che la classe CodeGenerationTools è specifica per questo file ttinclude e non è un modo generico e incorporato per generare il codice in T4.

Altri suggerimenti

ho scritto il seguente metodo per rendere primo carattere maiuscolo, spazi rimuovere / sottolineature e rendere maiuscolo carattere successivo. Vedere i campioni di seguito. Sentitevi liberi di usare.

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;
}

campioni di ingresso / uscita: first_name = FirstName, id = Id, messaggio di stato = StatusMessage

Questo è un buon consiglio però non ti aiuta a conoscere dove il posto giusto per mettere una tale funzione è ...

C'è qualche indicazioni su decomponendo il file EF .TT o passando attraverso la generazione di uscita per vedere come si costruisce l'uscita?

sono stato in grado di utilizzare la funzione di cui sopra con successo inserendo la spina in una funzione chiamata (Ef4.3)

public string proprietà (EdmProperty edmProperty)

che sembra essere utilizzato per inviare linee come "public int nomecampo {get; set;}"

e ha cambiato il parametro 3 ° (indice {2}) per la formattazione di avvolgere con la funzione per modificare il nome, in questo modo:

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

Questa non è perfetto, ad esempio: non tiene "Ucasing" esistente e non si preoccupa di cose come questa: customerIP uscite: Customerip che IMO non è molto leggibile ...

ma è meglio di quello che stavo guardando che era un incubo perché il database è stata mescolata pasticcio di camelCase, PascalCase e la separazione di sottolineatura, in modo abbastanza orribile.

in ogni caso spero che questo aiuta qualcuno ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top