Il comando di migration add
EF7 (ad oggi, beta5) confronta le classi del modello definite in DbContext
con lo snapshot del modello corrente, crea una nuova classe di migrazione e aggiorna l'istantanea del modello.
Devo modificare la migrazione per far sì che generi diversi DDL SQL. Ad esempio, EF7 utilizza sequenze per i valori di incremento automatico di SQL Server e mi piacerebbe che utilizzasse l'identità. Tuttavia potrebbe essere qualsiasi altra ragione. Il comando di migration remove
fisicamente i file di migrazione e ripristinerebbe l'istantanea del modello, quindi in questo caso è inutile.
Ci sono 3 file che contengono codice correlato che sembrano aver bisogno di essere modificati:
Up
e Down
dovrebbero essere modificati. DbContextModelSnapshot
contiene annotazioni che devono essere modificate [migration].Designer.cs
contiene anche un'istantanea del modello per la migrazione. Suppongo che questa istantanea debba corrispondere all'istantanea del modello nell'elemento 2, ma non sono sicuro. L'unica informazione che ho sullo scopo è dal blog di Brice , che dice "È lì nel caso in cui tu o un fornitore hai bisogno di ispezionare il modello per ottenere ulteriori informazioni durante una migrazione". Domande specifiche:
Risposte specifiche:
Le due istantanee del modello devono essere mantenute sincronizzate al fine di eseguire correttamente le migrazioni?
No, l'istantanea nella migrazione è l' ultima risorsa per gli scrittori di provider. Ad esempio, SQLite non può rinominare le colonne in modo che possa utilizzare lo snapshot del modello di migrazione per eseguire una ricostruzione della tabella per questa operazione. Il 99% delle volte non sarà mai usato.
La modifica di 3 file separati è l'unico modo per modificare la migrazione?
La maggior parte delle volte, dovresti modificare solo il file di migrazione principale. In rari casi, potrebbe essere necessario modificare l'istantanea del modello se si sta lavorando in un ambiente di team e si verifica un conflitto di unione. Puoi ignorare il file del designer; cattura solo alcuni metadati sulla migrazione.
Potrebbe non essere necessario modificare nulla se si configura correttamente il modello. Ad esempio, per utilizzare l'identità anziché le sequenze, eseguire l'override di DbContext.OnModelCreating()
e aggiungere modelBuilder.ForSqlServer().UseIdentity()
.
Esiste un comando EF che rigenera solo le istantanee del modello, ma non i metodi di migrazione?
No, non dovrebbe essere necessario poiché non si modifica quasi mai questi file.