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