2017-02-21 5 views
0

У меня есть небольшая ситуация, которая редко встречается, но ей было поручено представить для нее предварительно подготовленную проверку.Проверка наличия базы данных DBContext

В настоящее время, если наша БД отключена в автономном режиме, системное сообщение, получающее вывод, состоит в том, что стандартный объект имеет нулевую ссылку. Я мог бы захватить это через блок try/catch в этом одном месте. Однако это может быть несколько случаев.

Моя основная проблема заключается в следующем: у нас есть класс по умолчанию, который мы используем для вызова DbContext, который называется DatabaseContext.cs. Этот класс наследует DbContext, и в его конструкторе есть базовый вызов для соединения. См. Ниже, как это называется.

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

Игнорировать часть расшифровки (мы шифруем нашу строку соединения). Мой вопрос, который у меня есть, - это способ, которым я могу заманить этот вызов? Я думал о том, чтобы попробовать/поймать его, но не был уверен в том, чтобы удалить его из базового вызова одновременно. Вероятно, это так просто, но я хочу быть уверенным до того, как удалю его, а затем у него возникнут проблемы. Благодарю.

+0

Вы можете проверить это: http://stackoverflow.com/questions/19211082/testing-an-entity-framework-database-connection –

+0

так, что вы хотите сделать, чтобы проверить ConnectionString является действительным или DBContext может быть успешно создан? –

+0

@YashveerSingh Я ищу проверку, чтобы гарантировать, что DbContext существует и активен. Если соединение по какой-либо причине было разорвано (сервер DB вниз), я должен сообщить пользователю как можно более любезно. – IyaTaisho

ответ

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 
      } 
     } 
Смежные вопросы