16

Se si rinomina una proprietà, l'IDE di Visual Studio è abbastanza intelligente da consentire al refactoring di rinominare tale proprietà in tutto il codice. Se che rinomina è su un modello utilizzato in EF Migrazioni, e si esegue una migrazione automatica standard come:Migrazioni EF: RenameColumn in Migrazioni automatiche?

update-database -f 

Otterrete questo:

AddColumn("NewName"... 
DropColumn("OldName"... 

Non quello che volevi. Ovviamente l'esecuzione di Add-Migration a questo punto ti consentirà di entrare e modificare manualmente queste 2 chiamate a una singola chiamata a RenameColumn, ma c'è un modo per far sì che le Migrazioni automatiche lo facciano automaticamente? Qualche approccio alla rinomina di proprietà che non sto facendo bene, forse?

Sto usando EF 5.0 in VS2012, ma questo comportamento appare anche in EF 4.3.1 e VS2010.

risposta

23

Le migrazioni non possono rilevare automaticamente la rinomina di una proprietà e di una colonna. La migrazione dello scaffold conterrà un Drop/Create che dovrai modificare in Rinomina.

Se si rinomina semplicemente la colonna (aggiungendo un'annotazione [Column] alla proprietà), è possibile rilevarla come ridenominazione poiché è possibile trovare una corrispondenza sul nome della proprietà a cui è associata la colonna.

Abbiamo preso in considerazione l'aggiunta di uno switch -Renames al comando Add-Migration, ma alla fine abbiamo deciso di modificare il codice generato è stato più semplice che elaborare la sintassi per fornire i nomi di dominio sulla riga di comando.

~ Rowan

+1

L'ho appena fatto nell'ultimo EF (a partire dall'8 dicembre 2014) e ha rilevato un nuovo nome. Non sono sicuro del meccanismo di questo - Rowan, puoi consigliare a tutti? (prima il codice, nessuna annotazione, nessuna conoscenza fluente - semplicemente rinominato le proprietà in alcune classi) –

5

La mia opinione: EF non ha idea che tu abbia rinominato la colonna esistente. Il refactoring è una modifica del tempo di progettazione senza alcuna informazione persistente sulla modifica, quindi quando esegui le migrazioni, EF semplicemente non sa come differire tra la ridenominazione e l'eliminazione/aggiunta reale di una nuova colonna.

+0

Sarebbe molto utile a persistere queste informazioni da parte dell'IDE alla Migrazioni, però, dal momento che già Migrazioni sfruttare l'IDE in molti altri modi. –