вы можете написать собственный перехватчик, который дает вам метод onsave со следующей подписью
public override bool OnLoad (сущность объекта, идентификатор объекта, состояние объекта [], строка [] propertyNames, типы IType [])
тогда у вас может быть дублирующая логика проверки, внутри этого метода. (Т.е. сохраняя словарь всех идентификаторов, уже существующих для этого типа)
Кроме того, вы можете напрямую подключить ваш дублирующий проверочный код в пользовательской реализации ISaveEventListner.
вам нужно зарегистрировать свой собственный список событий во время настройки nhibernate. вот фрагмент для ссылки
Configuration cfg = new Configuration();
ISaveEventListener[] stack = new ISaveEventListener[] { new MySaveListener(), new DefaultSaveEventListener() };
cfg.EventListeners.SaveEventListeners = stack;