Открытые члены должны быть объявлены виртуальными, если вы используете отложенную загрузку, потому что NHibernate создаст прокси-объекты для ваших сущностей во время выполнения. Поэтому не используйте отложенную загрузку или просто объявляйте событие как виртуальное - это не так часто, но возможно.
NHibernate создает прокси-классы для всех лениво загруженных сущностей и использует их там, где на сущность ссылаются, но еще не загружены. Доступ к этому прокси вызывает загрузку реального объекта из базы данных. Этот подход требует наследования от вашего класса сущности во время выполнения и переопределения открытых членов, поэтому эти члены должны быть виртуальными.
И есть другое решение. Вы можете добавить proxy="ISomeInterface"
к объявлению класса. Тогда вам не нужны виртуальные члены, в то время как прокси просто реализуют данный интерфейс.