Ci sono alcuni dati di base specifici per gli ambienti Dev / Test / Prod.
Utilizziamo ora Entity Framework Migrations per tutti gli ambienti, ma non sappiamo come specificare le migrazioni per particolari ambienti in un modo in cui specifichiamo una migrazione da eseguire solo su Dev / Test / Prod.
Ciò potrebbe essere realizzato in Fluent Migrator con gli attributi Tag. Ma che dire di Entity Framework?
Quando dici "dati di base" presumo tu intenda Seminare ciascun ambiente. Le migrazioni forniscono un meccanismo di seeding per questo. All'interno di Seed () puoi differenziare gli ambienti come faresti con il codice normale. Ci piace usare l'impostazione di trasformazione di Web.config:
protected override void Seed(BookService.Models.BookServiceContext context)
{
if (ConfigurationManager.AppSettings["DeployEnvironment"] == "UAT")
{
context.Authors.AddOrUpdate(x => x.Id,
new Author() { Id = 1, Name = "Test User" },
);
}
else if (ConfigurationManager.AppSettings["DeployEnvironment"] == "PROD")
{
context.Authors.AddOrUpdate(x => x.Id,
new Author() { Id = 1, Name = "Production User" },
);
}
}
Un'altra opzione è le direttive del compilatore:
protected override void Seed(BookService.Models.BookServiceContext context)
{
#if DEBUG
context.Authors.AddOrUpdate(x => x.Id,
new Author() { Id = 1, Name = "Test User" },
);
#else
context.Authors.AddOrUpdate(x => x.Id,
new Author() { Id = 1, Name = "Production User" },
);
#endif
}
Per quanto riguarda l'applicazione delle migrazioni stesse, seguiamo questo processo in fase di sviluppo. Quando siamo pronti per la distribuzione in UAT, possiamo semplicemente puntare la stringa di connessione su UAT ed eseguire le migrazioni oppure possiamo creare uno script per aggiornare il database. In PROD facciamo questo .