2017-05-18 1 views
4

j'ai un code dans mon ConfigureServices qui échoue lors de l'exécution d'une migration:ASP.NET: Vérifiez si la migration de fonctionner

dotnet ef migrations list 

J'essaie d'ajouter un certificat, mais il ne peut pas trouver le fichier (cela fonctionne au démarrage du projet dans son ensemble). Alors, est-il un moyen de faire quelque chose comme ceci:

if (!CurrentEnvironment.IsMigration()) { 
    doMyStuffThatFailsInMigration() 
} 

De cette façon, je pouvais garder mon code comme il est juste quand exercerai pas en cours d'exécution dans une migration.

Merci

Répondre

0

Ma solution actuelle pour détecter si une migration n'a pas eu lieu:

using System.Linq; 
// app is of type IApplicationBuilder 
// RegisteredDBContext is the DBContext I have dependency injected 
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope()) 
     { 
      var context = serviceScope.ServiceProvider.GetService<RegisteredDBContext>(); 
      if (context.Database.GetPendingMigrations().Any()) 
      { 
       var msg = "There are pending migrations application will not start. Make sure migrations are ran."; 
       throw new InvalidProgramException(msg); 
       // Instead of error throwing, other code could happen 
      } 
     } 

Cela suppose que les migrations ont été synchronisées à la base de données déjà. Si seulement EnsureDatabase a été appelée, cette approche ne fonctionne pas car les migrations sont toujours en attente. Il existe d'autres méthodes sur le context.Database. GetMigrations et GetAppliedMigrations.