Быстро тестирующая возможность соединения базы данных в платформе объекта

[Я плохо знаком с ADO.NET и Платформой Объекта, поэтому простите мне, если это подвергает сомнению, кажется нечетным.]

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

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

Сценарий один

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

Сценарий два

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

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

Сообщите мне, как лучше всего разрешить это, и если существует лучший способ протестировать возможность соединения к DB, быстро советуйте.

5
задан Rodney S. Foley 9 November 2009 в 01:29
поделиться

1 ответ

Не существует простого или быстрого способа решить эту проблему. Значение 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;
}
3
ответ дан 15 December 2019 в 06:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: