Ho una migrazione applicata utilizzando lo schema db "haward".
public partial class CreateCourseCategoryTable : DbMigration
{
public override void Up()
{
CreateTable(
"haward.CourseCategories",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name = c.String(),
Code = c.String(),
})
.PrimaryKey(t => t.Id);
}
public override void Down()
{
DropTable("haward.CourseCategories");
}
}
con questa mappatura
public class CourseCategoryMapping : EntityTypeConfiguration<CourseCategory>
{
public CourseCategoryMapping()
{
ToTable("CourseCategories", "haward");
}
}
ora voglio cambiare lo schema da "haward" a "tr" Non voglio aggiungere migrazione con questo, quindi ho pensato di modificare direttamente il codice sorgente di Migration and Mapping.
public partial class CreateCourseCategoryTable : DbMigration
{
public override void Up()
{
CreateTable(
"tr.CourseCategories",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name = c.String(),
Code = c.String(),
})
.PrimaryKey(t => t.Id);
}
public override void Down()
{
DropTable("tr.CourseCategories");
}
}
public class CourseCategoryMapping : EntityTypeConfiguration<CourseCategory>
{
public CourseCategoryMapping()
{
ToTable("CourseCategories", "tr");
}
}
quindi ricreare il database vuoto ed emesso il comando update-database ma dice che ho ancora delle modifiche in sospeso.
quindi quello che ho fatto è stato il comando add-migration per verificare quali sono i cambiamenti. e sembra che rilevi ancora le mie modifiche (da "haward" a "tr" schema) anche senza la tabella delle migrazioni.
dove vengono salvate le modifiche al modello? e come modificare direttamente il codice sorgente e riapplicare la migrazione? So che non è consigliabile perché è a cosa serve la migrazione. ma non voglio sporcare la mia storia solo con quei cambiamenti, specialmente se sono solo nella fase iniziale di sviluppo.
TL; DR: Questo è molto complicato - è molto più facile aggiungere una nuova migrazione più tardi per correggere il problema.
Una migrazione di Entity Framework consiste di due parti: il codice e un hash del modello. L'hash del modello viene utilizzato per determinare se il modello è stato modificato e, quindi, se sono necessarie nuove migrazioni.
Se si modifica il modello, si modifica l'hash. Questo hash è memorizzato nel file MigrationName.designer.cs. Non è possibile modificare il modello e modificare il codice migration.cs, poiché il modello non corrisponde più all'hash del modello. È inoltre necessario rigenerare l'hash per il modello.
L'unico modo per farlo è quello di ripristinare il database e aggiornare l'hash.
Considera che hai applicato 3 migrazioni:
Se desideri applicare una modifica da Migration2 in poi ...
Update-Database -TargetMigration Migration1 -Force
(NB - Ciò potrebbe causare la perdita di dati, quindi lavorare su una copia di sviluppo del database) Add-Migration xxxxxxxxxxx_Migration2
(usa il nome completo della migrazione inclusa la data). Questo aggiornerà solo il file designer.cs Update-Database -TargetMigration Migration2
Add-Migration xxxxxxxxxxx_Migration3
Update-Database