Ho utilizzato l'approccio standard di migrazione aggiuntiva per l'aggiornamento del mio database core di Aspnet su Entity Framework. Ora devo spostare due colonne di "immagine" in una nuova tabella (e i relativi dati di immagine), rimuovere le colonne dalla tabella originale e impostare una relazione di chiave esterna tra la vecchia e la nuova tabella. Ho uno script SQL funzionante per fare tutto questo.
Come posso eseguire questo script sql come parte di una normale migrazione EF, e assicurarmi che le successive modifiche di add-migration rifletteranno le modifiche che il mio script sql farà (aggiungendo nuove tabelle / colonne, rimuovendo colonne di immagini dalla tabella originale)?
Ho visto alcuni riferimenti a SqlFile e derivano da DbMigration, ma nulla che si adatta bene al mio scenario. Sto usando EF Core, Aspnet Core 2.0.
Puoi modificare la classe di migrazione creata (metodi Up
e Down
) e includere qualsiasi SQL che desideri nel posto corretto:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "MyExtraColumn",
table: "MySuperTable");
migrationBuilder.Sql("DROP DATABASE [master]"); // <<< Anything you want :)
migrationBuilder.DropColumn(
name: "MyExtraColumn2",
table: "MySuperTable");
}
È responsabilità dell'utente non "interrompere" lo schema del database (nel punto di vista EntityFramework) e fornire script Down
affidabile per poter eseguire la migrazione su / giù / su / giù più volte.
Inoltre, non dimenticare di aggiungere nuovamente SQL se rimuoverai la migrazione e la aggiungerai nuovamente.