2012-12-11 9 views
7

Utilizzo le migrazioni EF nella mia applicazione con il database SQL Azure. Funzionava bene fino a quando non ho abbandonato manualmente una tabella in SQL Azure. Ora, quando pubblico la mia domanda, la tabella abbandonata non viene creata in SQL Azure. Questo è l'errore che ottengo.Tabella SQL Azure non creata con Migrazioni EF

Cannot find the object "dbo.TableName" because it does not exist 
or you do not have permissions. 

Mi sento come se avessi creato qualche incongruenza tra il database e il mio modello.

Sto utilizzando le migrazioni automatiche.

risposta

4

Perché hai eliminato il tavolo per iniziare? Vuoi che venga ricreato?

Prima di entrare nelle soluzioni più complesse, hai provato a utilizzare l'opzione -TargetMigration per tornare alla migrazione poco prima di quella in cui è stata creata la tabella? Ho la sensazione che otterrai errori SQL sul tentativo di cancellare una tabella o un indice di fk che non c'è, ma vale la pena provare. È possibile farlo utilizzando questo comando update-database -TargetMigration YourOldMigration. Ciò ripristinerà tutte le migrazioni applicate dopo la migrazione di destinazione eseguendo i comandi trovati nei metodi Down() dei file di migrazione. Se ricevi errori SQL, puoi provare a modificare i contenuti con i metodi Down() per evitare gli errori. Attento. Ciò potrebbe causare la perdita di dati. Se EF ti avvisa di questo e non ti interessa. Prova ad aggiungere -Force alla fine il tuo comando.

In alternativa e in aggiunta ....

vostri migrazioni non sono solo calcolate confrontando il vostro schema db ai tuoi DbContext/modelli. Se apri il tuo database sql azure in sql server management studio dovresti vedere una tabella chiamata __MigrationHistory. Memorizza tutte le migrazioni che sono state applicate al tuo db attraverso migrazioni automatiche.

Leggere prima di iniziare. Ci sono alcuni fattori che vorrai considerare prima di saltare. Supponendo che non lo hai già manipolato, dovresti riuscire a trovare una riga per il set di modifiche che ha originariamente creato la tua tabella. Elimina quella riga. Ora le migrazioni automatiche EF penseranno che tale modifica non sia stata ancora applicata al tuo DB. Se si esegue update-database, si dovrebbe provare a rieseguire il programma.

Se avessi altre modifiche in quel file di migrazione, tenterà di rieseguire anche quelle. Questo può causare tutti i tipi di errori SQL. Probabilmente vorrai ripristinare manualmente tutte le modifiche che facevano parte della migrazione. Preoccupato per la perdita di dati? Prova a copiare i dati in una tabella creata manualmente per memorizzare fino a quando non hai finito. Una volta completata la migrazione, è possibile copiare nuovamente i dati nelle nuove tabelle/colonne.

Doppia alternativa. Se non sei troppo avanti nello sviluppo e non hai troppe preoccupazioni sulla perdita di dati, potrebbe essere più semplice rilasciare l'intero database e lasciare che le migrazioni automatiche lo ricreano da zero.

Spero di averti lì

Problemi correlati