Вот хорошее объяснение EAFP («Проще просить прощения, чем разрешения»), которое, я думаю, применимо здесь, даже если это страница Python в Википедии. Использование исключений приводит к более естественному стилю кодирования, IMO - и, по мнению многих других, тоже.
Я бы пошел на шаг 2 (почти, поскольку он не обязательно должен быть доступен только для чтения) и создал настраиваемого поставщика членства для NHibernate.
Чтобы сэкономить время, вы можете использовать существующий. например, от Мануэля Абадиа .
При этом вы сохраняете полную мощность NHibernate (ленивая загрузка и т. д.), а также пользуетесь услугами M / R / P.