2012-06-24 12 views
6

Quando aggiungo una nuova tabella che ha alcune relazioni con il mio database e quindi eseguo Add-Migration Vedo che il codice è generato nel metodo Up per aggiungere la tabella e le sue relazioni. Tuttavia, preferisco definire la relazione utilizzando l'API fluente nel metodo OnModelCreating. Come interagiscono questi due metodi? Posso cancellare il codice dal metodo Up che definisce la relazione per esempio?Come si riferiscono OnModelCreating e Migrazioni non automatiche?

risposta

11

Ognuno di loro ha scopo completamente diverso:

  • OnModelCreating viene utilizzato per le definizioni in linea fluente-API del modello. Queste definizioni insieme a convenzioni di default, annotazioni di dati e classi di configurazione costituiscono la definizione completa del modello.
  • migrazione esplicita definisce ciò che si deve fare per database per migrare alla forma richiesta dal modello attuale

Ora, come quei due si riferiscono? La migrazione ha due input che vengono utilizzati per generare il codice di migrazione (metodi Up e Down). Un input è l'ultimo record di migrazione memorizzato nella tabella __MigrationHistory nel database. Questo record contiene un modello serializzato che rappresenta il database. Questo input è facoltativo perché la prima migrazione deve funzionare senza di essa. Il secondo input è obbligatorio: è il modello corrente che viene recuperato eseguendo il codice nell'assieme corrente =>Add-Migration eseguirà il tuo OnModelCreating per ottenere il modello corrente e confrontarlo con il modello recuperato dal database. Il risultato del confronto è il contenuto dei metodi Up e Down nella migrazione esplicita.

+1

Grazie! Quindi, se ho capito bene, il codice nel metodo "Su" rifletterà le definizioni impostate nel metodo "OnModelCreating" (supponendo che tu abbia aggiunto una Migrazione dopo aver scritto la definizione fluente dell'API ovviamente). Uno deve * non * rimuovere queste definizioni riflesse da 'Su'. – Dabblernl

+0

Sì, è corretto. –

Problemi correlati