Voglio eseguire un database SQLite in fase di sviluppo e un database SQLServer Express in produzione.
Stiamo usando il codice prima con le migrazioni del database.
Come faccio a iniettare un diverso dbcontext in ogni ambiente?
Come faccio a eseguire migrazioni su un database specifico. Ad esempio, in fase di sviluppo voglio eseguire migrazioni sul database SQLite.
Quindi immagino di aver trovato un modo carino per farlo. È possibile utilizzare la convenzione di avvio ConfigureDevelopmentServices per aggiungere il proprio DbContext SQLSite. Quindi, proprio come un esempio di base, avresti:
// Production "like" ConfigureServices
public void ConfigureServices(IServiceCollection services)
{
// Use Sql Server
services.AddDbContext<SchoolContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("ProductionConnection")));
}
// Development ConfigureServices
public void ConfigureDevelopmentServices(IServiceCollection services)
{
// Use SQL Lite
services.AddDbContext<SchoolContext>(options =>
options.UseSqlite(Configuration.GetConnectionString("DevelopmentConnection")));
}
Puoi anche andare oltre e aggiungere un servizio ConfigureStaging se ti capita di avere un altro contesto diverso solo per la gestione temporanea. Per evitare di copiare e incollare servizi comuni, potresti avere un metodo privato che registra i servizi comuni e ha quelli separati solo con cose specifiche.
Ora per le migrazioni, non l'ho mai testato ma, la mia ipotesi migliore è che se si ha il dbContext corretto e la stringa di connessione corretta, le migrazioni funzioneranno correttamente. Devi solo puntare al progetto EF ed eseguirlo.