Быстрое тестирование подключения к базе данных в Entity Framework
=================================================================

 [ *Я новичок в ADO.NET и Entity Framework, так что прости меня, если этот вопрос кажется странным.* ] 

 В моем приложении WPF пользователь может переключаться между различными базами данных во время выполнения. Когда они сделают это, я хочу иметь возможность **быстро** проверить, что база данных все еще доступна. То, что у меня легко доступно, это ObjectContext. Тест, который я выполняю, состоит в подсчете общего количества записей очень маленькой таблицы, и если он возвращает результаты, то он проходит, если я получаю исключение, то он завершается неудачей. Мне не нравится этот тест, его проще всего было сделать с ObjectContext. 

 Я попытался установить тайм-аут соединения в строке соединения и в ObjectConntext и, похоже, либо изменить что-либо для первого сценария, в то время как второй уже быстрый, поэтому не заметно, что он что-то меняет. 

 **Сценарий первый** 

 Если соединение было прервано, когда перед первым доступом прошло около 30 секунд, прежде чем это дает мне исключение, что основной поставщик не удалось 

 **Сценарий Два** 

 Если база данных работала, когда я запустил приложение, и я получил к нему доступ, а затем соединение прерывается во время использования теста, происходит быстро и возвращается почти мгновенно. 

 Я хочу, чтобы первый описанный сценарий был таким же быстрым, как и второй. 

 Пожалуйста, дайте мне знать, как лучше решить эту проблему, и, если есть лучший способ быстро проверить подключение к БД, пожалуйста, сообщите. 

 Там действительно нет простого или быстрого способа решить эту проблему. Значение ConnectionTimeout игнорируется в Entity Framework. Решением, которое я использовал, является создание метода, который проверяет, является ли контекст действительным, передавая местоположение, которое вы хотите проверить, и затем получая счет из известной очень маленькой таблицы. Если это вызывает исключение, контекст недопустим, иначе это так. Вот пример кода, показывающего это. 

```
public bool IsContextValid(SomeDbLocation location)
{
    bool isValid = false;

    try
    {
        context = GetContext(location);
        context.SomeSmallTable.Count();
        isValid = true;                
    }
    catch
    {
        isValid = false;
    }

    return isValid;
}

```