2017-02-21 1 views
0

J'ai une petite situation qui se produit rarement, mais j'ai été chargée de présenter un test.Vérification pour voir si la base DBContext existe

Actuellement, si notre base de données se trouve déconnectée, le message système qui est généré est que l'objet standard a une référence nulle. Je pourrais piéger ceci via essayer/attraper le bloc dans cet emplacement. Cependant, il peut y avoir plusieurs instances de ceci.

Mon problème principal est le suivant: nous avons une classe par défaut que nous utilisons pour appeler le DbContext, qui s'appelle DatabaseContext.cs. Cette classe hérite de DbContext et dans son constructeur a un appel de base pour la connexion. Voir ci-dessous pour savoir comment il s'appelle. Ignorez la partie Decrypt (nous cryptons notre chaîne de connexion).

public partial class DatabaseContext : DbContext 
{ 
    public DatabaseContext() 
     : base(new OracleConnection(Common.Common.Decrypt(ConfigurationManager. 
        ConnectionStrings["Site"].ToString())), true) 
{ 
} 

Ma question est la suivante: est-ce que je peux piéger cet appel? J'ai pensé faire un essai/attraper autour de lui, mais n'était pas vraiment sûr de le retirer de l'appel de base en même temps. C'est probablement aussi simple que ça, mais je veux être doublement sûr avant de l'enlever et d'avoir des problèmes avec ça. Merci.

+0

Vous pouvez vérifier: http://stackoverflow.com/questions/19211082/testing-an-entity-framework-database-connection –

+0

donc ce que vous voulez faire pour vérifier la connectionstring est valide ou DBContext peut être créé avec succès? –

+0

@YashveerSingh Je cherche à vérifier que le DbContext existe et qu'il est actif. Si la connexion pour une raison quelconque a été coupée (serveur DB arrêté), je dois dire à l'utilisateur aussi gentiment que possible. – IyaTaisho

Répondre

0
 private static bool CheckConnection() 
      { 
       bool flag = false; 
       try 
       { 
        using (var context = new ApplicationDbContext()) 
        { 


         if (context.Users.FirstOrDefault() != null) 
         { 
          // thismeans all is well on DBContext 
          flag= true; 
         } 
        } 
       } 
       catch(Exception t) 
       { 
        Debug.WriteLine("Error connecting to DB "); 
        flag= false; 
       } 
       return flag; 
      } 


// use it like this in global.assax.cs 


protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 
      GlobalConfiguration.Configure(WebApiConfig.Register); 
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 

      if(CheckConnection()) 
      { 
       // set session variable of something else to show to user 
      } 
     }