Ho aggiunto EF 5 al mio progetto tramite Nuget e abilitato le migrazioni con il comando "Abilita-Migrazioni". Ho quindi chiamato "Add-Migration" per generare il codice base per generare lo schema.Migrazioni del codice quadro entità - bloccato sulla migrazione iniziale
Ho quindi aggiunto una proprietà a uno dei miei oggetti dominio (proprietà stringa denominata "TestProperty") e aggiunto una mappatura al file EntityTypeConfiguration (stiamo ignorando le convenzioni al momento).
Calling "Add-migrazione" ancora una volta produce l'errore:
Unable to generate an explicit migration because the following explicit migrations are pending: [201303262144218_Initial]. Apply the pending explicit migrations before attempting to generate a new explicit migration.
Ma chiamando "Update-Database" produce un'eccezione SQL perché esistono già le tabelle:
There is already an object named 'Customer' in the database
Nel mio costruttore il mio DbContext Ho provato le diverse strategie di aggiornamento, ad esempio:
Database.SetInitializer<UnitOfWork>(new DropCreateDatabaseAlways<UnitOfWork>());
Sono missi qualcosa di ovvio? Ho provato la soluzione qui, ma non ha funzionato: Automatic Migrations for ASP.NET
Grazie
EDIT: aggiornamento La chiave per ottenere oltre il primo passo è quello di creare la migrazione iniziale e quindi eliminare il codice generato dal Up e giù (http://thedatafarm.com/blog/data-access/using-ef-migrations-with-an-existing-database/).
Posso quindi aggiornare il modello e la mappa EF e quindi eseguire Add-Migration. Ciò genera una migrazione con il codice Up and Down corretto.
Il problema è quindi provare ad applicare l'aggiornamento. Update-Database genera l'errore "Impossibile aggiornare il database in modo che corrisponda al modello corrente perché ci sono modifiche in sospeso e la migrazione automatica è disabilitata ... migrazione automatica Imposta DbMigrationsConfiguration.AutomaticMigrationsEnabled su true per abilitare la migrazione automatica Puoi usare Comando di migrazione per scrivere le modifiche del modello in sospeso a una migrazione basata su codice ". Ok, quindi provo di nuovo Add-Migration e produce un'altra migrazione con lo stesso codice identico all'ultimo.
Eseguo Update-Database e restituisco lo stesso errore. Provo "Update-Database -TargetMigration 201304080859556_MyMigration -Force" ma questo produce "La migrazione target specificata '201304080859556_MyMigration' non esiste. Assicurati che la migrazione target faccia riferimento a un ID di migrazione esistente" - Funziona!
Molto frustrante!
Esiste un file esistente nella directory Migrations denominata 201303262144218_Initial.cs? – MattSull
Sì. Sono un po 'confuso - la migrazione iniziale dovrebbe essere vuota o si suppone che crei il database nel suo stato iniziale? Inoltre, non ho una tabella __MigrationHistory (nel mio database o nel master) – SturmUndDrang
Iniziale è solo un nome dato a quella particolare migrazione. A volte le persone chiamano la loro prima iniziale di migrazione. Se si disponeva di un db esistente e si eseguiva il comando add-migration/update-database senza apportare modifiche alle classi del modello, il file di migrazione sarebbe vuoto. Eliminare il file 201303262144218_Initial.cs e quindi eseguire nuovamente i due comandi ('aggiungi-migrazione nuovaMigrazione' quindi 'aggiornamento-database'. – MattSull