Вы всегда можете создать свое собственное поведение при удалении, используя DeleteEventListener:
public class DeleteEventListener : DefaultDeleteEventListener
{
protected override void DeleteEntity(IEventSource session, object entity, EntityEntry entityEntry, bool isCascadeDeleteEnabled, IEntityPersister persister, ISet transientEntities)
{
Event event = entity as Event;
if (event != null && event.Transaction != null) throw new Exception("You can't delete this Event! Look! It has a Transaction!");
CascadeBeforeDelete(session, persister, entity, entityEntry, transientEntities);
CascadeAfterDelete(session, persister, entity, transientEntities);
}
}
Этот DeleteEventListener должен быть зарегистрирован как часть вашей конфигурации установки NHibernate. В элементе фабрики сеансов:
<event type="delete">
<listener class="myNamespaces.DeleteEventListener, myAssembly" />
</event>
Я не тестировал этот конкретный код, но у меня есть похожий код в моем приложении, поэтому я могу помочь, если вы застряли.