[Я плохо знаком с ADO.NET и Платформой Объекта, поэтому простите мне, если это подвергает сомнению, кажется нечетным.]
В моем приложении WPF пользователь может переключиться между различными базами данных во время выполнения. Когда они делают это, я хочу смочь сделать быструю проверку, что база данных все еще доступна. То, что я имею легко доступный, является ObjectContext. Тест, который я формую, получает количество на общих записях очень маленькой таблицы и если это возвращает результаты затем, это передало, если я получаю исключение затем, это перестало работать. Мне не нравится этот тест, это казалось самым легким, чтобы сделать с ObjectContext.
Я попытался установить тайм-аут соединения это в строке подключения и на ObjectConntext, и любой, кажется, изменяет что-либо для первого сценария, в то время как второй уже быстр, таким образом, не примечательно, если это изменяет что-нибудь.
Сценарий один
Если подключение снизилось, когда перед первым доступом оно берет приблизительно за 30 секунд до того, как оно даст мне исключение, которое привел к сбою базовый поставщик.
Сценарий два
Если база данных произошла, когда я запустил приложение, и я получаю доступ к нему, и затем отбрасывания подключения при использовании теста быстры и возвращаются почти немедленно.
Я хочу первый сценарий, описанный, чтобы быть столь же быстрым как второй.
Сообщите мне, как лучше всего разрешить это, и если существует лучший способ протестировать возможность соединения к DB, быстро советуйте.
Не существует простого или быстрого способа решить эту проблему. Значение 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;
}