Modifica manuale di una classe di migrazione EF7 e istantanea

code-first-migrations entity-framework-core

Domanda

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:

  1. La classe di migrazione primaria: i metodi Up e Down dovrebbero essere modificati.
  2. Il file DbContextModelSnapshot contiene annotazioni che devono essere modificate
  3. La classe parziale della migrazione secondaria: il file [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:

  1. Le due istantanee del modello devono essere mantenute sincronizzate al fine di eseguire correttamente le migrazioni?
  2. La modifica di 3 file separati è l'unico modo per modificare la migrazione? (Anche se a seconda delle modifiche, in alcuni casi è possibile che le istantanee del modello non debbano essere toccate.)
  3. Esiste un comando EF che rigenera solo le istantanee del modello, ma non i metodi di migrazione?

Risposta accettata

Risposte specifiche:

  1. 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.

  2. 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() .

  3. 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.



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow