В блоке catch вы указываете, какие исключения вы хотите перехватить. Так что если у вас есть
try {}
catch(Exception e){}
он будет перехватывать все исключения, которые происходят из класса Exception (то есть ВСЕ исключения). Если у вас есть:
try{}
catch (NHibernate.ADOException exception){}
он будет перехватывать только те исключения, которые являются производными от ADOException. Поэтому, если вы получите ArgumentException, оно пройдет, как если бы не было try / catch.