Обнаружить ошибку подключения к БД с помощью Linq? - PullRequest
1 голос
/ 06 июня 2009

Можно ли обнаружить ошибку в соединении до того, как мы получим приложение "Ошибка транспортного уровня" с использованием Linq?

Допустим, у меня есть SQL-сервер под названием SQLServer1, и я запускаю приложение, которое подключается к этому серверу с помощью LinQ для получения некоторой информации.

Я решил изменить имя сервера на SQLServer2. При следующем запуске приложения я получу сообщение об ошибке:

" Произошла ошибка транспортного уровня при получении результатов с сервера. (Поставщик: поставщик TCP, ошибка: 0 - указанное сетевое имя больше не доступно.) "

Потому что LinQ не знает, что произошло изменение!

Как я могу поймать это во время выполнения? Можно ли расширить класс DataContext, чтобы каким-то образом проверять соединение перед получением данных?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 26 февраля 2010

Вот как я расширил класс. Я использую одноэлементный шаблон для вызова контекста данных, в результате чего создается один объект контекста данных для каждого запроса страницы независимо от того, сколько раз вызывается одноэлементный вызов. При первом обращении к синглтону для каждого запроса я запускаю DataContext.DatabaseExists () и, если оно ложно, я корректно обрабатываю ошибку. Теперь, когда любой мой код пытается что-либо сделать с текстом данных, он предлагает моим пользователям сообщение «извините, база данных не работает».

ASP.NET C # код:

namespace dal
{
    public partial class DataModelDataContext
    {
        public static DataModelDataContext DataContext
        {
              get
              {
                  if (System.Web.HttpContext.Current.Items["ModelDataContext"] == null)
                  {
                      DataModelDataContext datacontext = new DataModelDataContext();
                      //Once per page request, of the datacontext is requested, check to see if the database connection is valid.
                      if (!datacontext.DatabaseExists())
                      {
                           System.Web.HttpContext.Current.Response.Redirect("DatabaseIsDown.html");
                      }
                      System.Web.HttpContext.Current.Items["ModelDataContext"] = datacontext;

                  }
                  return (DataModelDataContext)System.Web.HttpContext.Current.Items["ModelDataContext"];
              }
        }
    }
}
0 голосов
/ 06 июня 2009
try
{
   // run linq query here
}
catch (Exception e)
{
   // take appropriate action to handle the error like updating the connection string, etc.
}
...