Я использую NHibernate и ODP.NET для подключения к базе данных Oracle 11g. Конечно, могут быть ошибки соединения (сбой сети, сбой БД, ...). Я обрабатываю все эти исключения в своем коде, поэтому никаких проблем нет. Но, конечно, пользователь может повторить свои действия (возможно, это был короткий сбой сети), и возникает моя проблема:
ODP.NET по умолчанию использует пул соединений. Обычно проблем с этим нет, но когда пользователь повторяет действие после ошибки соединения, NHibernate получает недопустимое (объединенное в пул) соединение из ODP.NET. Пользователь должен повторить попытку несколько раз (пока пул не опустеет), чтобы он снова заработал.
Конечно, я могу отключить пул соединений в ODP.NET, но я бы хотел этого избежать. Я также читал о настройке, которая проверяет соединение с БД для каждого возвращенного соединения из пула, но это добавляет дополнительную обратную связь к каждому соединению, которого я тоже хотел бы избежать.
Есть ли способ настроить ODP.NET для автоматической очистки пула соединений, когда какое-либо соединение вызывает исключение соединения?