J'ai récemment modifié une application qui utilisait les éléments suivants pour le développement :
DropCreateDatabaseIfModelChanges<Context>
A utiliser :
public class MyDbMigrationsConfiguration: DbMigrationsConfiguration<GrsEntities>
{
public MyDbMigrationsConfiguration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}
}
Dans mon contexte de db, j'ai :
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Tell Code First to ignore PluralizingTableName convention
// If you keep this convention then the generated tables will have pluralized names.
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
//set the initializer to migration
Database.SetInitializer(new MigrateDatabaseToLatestVersion<GrsEntities, MigrationConfig>());
}
J'ai surchargé Seed(context) dans DbMigrationsConfiguration en utilisant l'extension AddOrUpdate alors que je n'utilisais que Add auparavant avec l'ensemencement sur le drop db (DropCreateDatabaseIfModelChanges).
Le problème est que la migration s'exécute à chaque démarrage de l'application, sans qu'il y ait de changement dans le DbContext. Chaque fois que je démarre l'application (bibliothèque exécutée par un service), l'initialisateur s'exécute ainsi que le Seed. Je m'attends à ce qu'il vérifie si une migration est nécessaire (en coulisse, il vérifie si le modèle correspond à la base de données physique), puis qu'il mette à jour toutes les tables/colonnes nouvelles/supprimées et qu'il n'exécute Seed que si quelque chose a changé.
Dans mes tests, les semences sont exécutées à chaque fois, ce qui est faisable mais semble inefficace et n'est pas ce que j'attendais. Malheureusement, la documentation MSDN est assez limitée.
Est-ce que je fais une mauvaise utilisation de MigrateDatabaseToLatestVersion ? Y a-t-il un moyen d'obtenir le comportement que j'attends (c.-à-d. ensemencer seulement s'il y a un changement de modèle) ou dois-je simplement changer ma méthode d'ensemencement pour qu'elle s'attende à être exécutée à chaque lancement d'application ?