Sto cercando di capire i diversi tipi di percorsi di migrazione che possiamo scegliere quando sviluppiamo un'applicazione ASP.NET Core 1.0 con EF Core. Quando ho creato la mia prima applicazione Core, ho notato che generava una classe ApplicationDbContextModelSnapshot che utilizza un ModelBuilder per creare il modello.
Poi ho letto che se ho bisogno di aggiungere una tabella al database, ho bisogno di creare il nuovo modello ed eseguire la riga di comando per generare il file di migrazione e aggiornare il database. Ok, ho capito fino a questo punto.
Ma quando lo faccio, noto che anche la classe ApplicationDbContextModelSnapshot viene aggiornata.
1) Significa che non posso modificare questa classe ApplicationDbContextModelSnapshot poiché sembra che venga rigenerata ogni volta?
2) Devo utilizzare Annotazioni dei dati per creare il mio modello o dovrei usare Fluent API che mi dice di costruire il mio modello nella classe ApplicationDbContext? Eh? un altro file che costruisce il modello?
Sto vedendo tre diversi modi di lavorare con il database qui, la classe di istantanee, le annotazioni di dati e l'API fluente. Sono confuso perché oggi ho commesso un errore nel mio ultimo file di migrazione, quindi ho cancellato il file, ho abbandonato il database e rianalizzato l'aggiornamento del database.
Ma facendo ciò ho ottenuto errori simili a:
The index 'IX_Transaction_GiftCardId' is dependent on column 'GiftCardId'.
ALTER TABLE ALTER COLUMN GiftCardId failed because one or more objects access this column.
Quindi, naturalmente, mi chiedevo se dovevo modificare la classe ApplicationDbContextModelSnapshot.
Qual è il percorso che dovrei intraprendere quando si tratta di migrazioni o aggiornamenti del database perché questi tre percorsi mi stanno confondendo.
Ho riscontrato questo problema prima di creare migrazioni, apportare modifiche al modello, creare nuove migrazioni e provare ad aggiornare il database. La causa principale è quando le chiavi vengono modificate e le relazioni non vengono eliminate e non vengono aggiunte o non esistono.
Hai due opzioni
Metodo semplice Il modo più semplice è anche il modo più distruttivo e possibile solo in un ambiente di sviluppo.
Elimina tutte le migrazioni, elimina il database, crea nuove migrazioni ed esegui "update-database".
Metodo difficile / più sicuro Questo è il metodo che richiede più tempo. Consiglio di farlo prima in un ramo di integrazione locale, spingendolo a un'integrazione remota, quindi in produzione.
Apri il file di migrazione, ovvero 20160914173357_MyNewMigration.cs. Elimina tutti gli indici in ordine Elimina / Aggiungi / Modifica schemi tabella Aggiungi tutti gli indici indietro.
Per entrambi i metodi, assicurati di testare e testare di nuovo.