2012-08-27 8 views
8

Non posso avere [.] (Punti) nei miei nomi di chiavi (indici, chiavi primarie e chiavi esterne) quando vengono generati da Add-Migration, quindi ho provato a scrivere un CSharpMigrationCodeGenerator, ma sfortunatamente non sembra che ti permetta di cambiare le chiavi esterne oi nomi degli indici. Il nome della chiave primaria può essere impostato come parte di rilevante tabella creare:Entity Framework 5 Nome chiave con codice prima

protected override void Generate(
    CreateTableOperation createTableOperation, IndentedTextWriter writer) 
    { 
     createTableOperation.PrimaryKey.Name = "USE THIS NAME"; 
     base.Generate(createTableOperation, writer); 
    } 

Ma quello che ho veramente bisogno è un modo per garantire che si ha appena rimosso e basta (che implica sovrascrivendo il generatore di nome personalizzato) - ma Non riesco a vedere come farlo.

+4

Hai provato a usare l'attributo del nome della colonna come discusso qui: http://stackoverflow.com/questions/5082991/influencing-foreign-key-column-naming-in-ef-code-first-ctp5 –

+2

Se si desidera un controllo dettagliato sul database. Il primo database potrebbe essere una soluzione migliore, quindi inserire prima il codice. –

risposta

0

Non hai provato a generare il codice in modo retrospettivo prima con lo power tools?

Non solo genera codice prima classi per te dal database, puoi anche personalizzare i modelli T4 che generano i tuoi oggetti per gestire scenari unici (ad esempio logica di denominazione personalizzata per gestire caratteri riservati). Il mio entity.tt ha il seguente sopra ogni oggetto generato: -

[MetadataType(typeof(<#= efHost.EntityType.Name #>_Validation))] 

Questo significa che posso avere tutto il mio convalida dei dati coltivato fuori in una classe separata che non viene sovrascritto su di ri-creazione dei miei oggetti.

+0

Grazie - questo problema non esiste più ed era piuttosto specifico al momento. Le cose sono andate avanti con gli strumenti nell'ultimo anno e quindi non sono più realmente rilevanti. –

0

questo problema non esiste più ed era piuttosto specifico al momento. Le cose sono andate avanti con gli strumenti nell'ultimo anno e quindi non sono più rilevanti in quanto non sarebbe necessario risolvere il problema in questo modo.

Molte grazie per la lettura e il commento