Sto lavorando con le migrazioni di codice di Entity Framework 5.0 First e sto avendo un problema con l'esecuzione di Update-Database. Dice che ci sono cambiamenti di modello in sospeso; ma dovrebbe essere up-to-date, in modo da eseguireAggiornamento del database non riuscito a causa di modifiche in sospeso, ma Add-Migration crea una migrazione duplicata
Add-Migration SomeMigrationName
e crea un file ... tuttavia, si crea un file che è essenzialmente lo stesso un duplicato di una precedente migrazione (se cerco di Update-Database di nuovo su quel file, fallisce con problemi relativi al tentativo di eliminare un vincolo inesistente). Inoltre, sono stato in grado di confermare che la migrazione "originale" è stata eseguita in base al modello di dati nel DB e dalla presenza di un record nella tabella __MigrationHistory!
Se elimino l'intero database ed eseguo di nuovo tutte le migrazioni, automaticamente o manualmente, ho lo stesso problema.
Il file di migrazione 'originale' che ho avuto è la seguente:
public partial class RenameLinkColumns : DbMigration
{
public override void Up()
{
DropForeignKey("dbo.Listing", "OfferedByUserId", "dbo.User");
DropIndex("dbo.Listing", new[] { "OfferedByUserId" });
AddColumn("dbo.Listing", "ListedByUserId", c => c.Int(nullable: false));
AddForeignKey("dbo.Listing", "ListedByUserId", "dbo.User", "UserId", cascadeDelete: true);
CreateIndex("dbo.Listing", "ListedByUserId");
DropColumn("dbo.Listing", "OfferedByUserId");
}
public override void Down()
{
AddColumn("dbo.Listing", "OfferedByUserId", c => c.Int(nullable: false));
DropIndex("dbo.Listing", new[] { "ListedByUserId" });
DropForeignKey("dbo.Listing", "ListedByUserId", "dbo.User");
DropColumn("dbo.Listing", "ListedByUserId");
CreateIndex("dbo.Listing", "OfferedByUserId");
AddForeignKey("dbo.Listing", "OfferedByUserId", "dbo.User", "UserId", cascadeDelete: true);
}
}
Quando ho fatto funzionare ancora una volta che Add-migrazione, i metodi Su/Giù in quel file sono esattamente gli stessi come queste.
Sono abbastanza impressionato dal fatto che le migrazioni siano state correttamente in grado di rilevare che avevo rinominato una colonna ForeignKey; ma è ciò che sta causando questo soffocare?
Sembra che ci sia una soluzione: ho eliminato il database e tutti i file di migrazione e ho creato una nuova migrazione "Iniziale", ma preferirei non farlo se possibile.
Update: Questo è stato non l'ultima migrazione che ha causato il problema, ma il problema è iniziato dopo una fusione (sto lavorando da solo, ma sto simulando il lavoro di squadra sui rami per saperne di più su git troppo), e cercando di ottenere il database al passo con l'unione. Questo potrebbe derivare dal collocare le migrazioni in un ordine particolare dopo l'unione, anche se una nota, le migrazioni hanno funzionato come come previsto nell'ordine in cui sono state eseguite quando ho fornito loro un DB vuoto.
Inoltre, questa migrazione originale necessitava di un ritocco manuale quando le tabelle contenevano i dati, poiché i dati dovevano essere copiati dalla vecchia alla nuova colonna. Tuttavia, ho provato quel file con e senza le mie modifiche manuali in quel file, e ho comunque riscontrato il comportamento osservato.
Ciao Mike io non sono in grado di controllo incrociato la vostra risposta come il mio ambiente di sviluppo è ormai passata, ma acceptng come risposta, come ci avete fornito convincenti ragionamento (e un bel commento sulla migrazione sopra :) – Nij
Grazie per aver spiegato questo. Avevo già pensato di farlo come una "correzione", ma non ero contento di controllarlo senza capire perché funzionasse. –
questo funziona ma è orribile, non so cosa fare una migrazione nulla-fare ogni volta che ho un cambiamento di silicio –