Reputation: 8462
I need to be able to validate some business rules on entities before any modification to DB is performed (Create, Update, Delete), and throw exception and rollback if these rules fail. I am building a framework and I want to do that always, despite whether user use my class to modify entities or directly NHibernate Session. I also need to be able to customize these business rules, depending on configuration file.
I've tried to inherit DefaultSaveOrUpdateEventListener
, overriding PerformSaveOrUpdate
, PerformUpdate
, PerformSaveOrReplicate
, PerformSave
, OnSaveOrUpdate
and DefaultSaveEventListener
with overriding PerformSaveOrUpdate
, PerformSave
, PerformSaveOrReplicate
, PerformUpdate
, OnSaveOrUpdate
. I just put Debug.WriteLine
, and called the base implementation. I didn't find any good and detailed description of those, so I tried everything that seems like what I need.
And I have initialized them like this:
configuration.EventListeners.SaveOrUpdateEventListeners[0] = new SaveOrUpdatePermissionListener(_mappingContext);
configuration.EventListeners.SaveEventListeners[0] = new SavePermissionListener(_mappingContext);
But looks like this does not always work. If I modify objects in the object tree, for some reason these methods catch all objects except of the root object.
What I did wrong? Maybe there are better ways of doing what I want to do?
Upvotes: 1
Views: 156
Reputation: 8462
Was able to do that, by inheriting IPreUpdateEventListener, IPreDeleteEventListener, IPreInsertEventListener
interfaces instead of DefaultSaveOrUpdateEventListener
and DefaultSaveEventListener
.
Still, if anybody has a better idea of achieving the task, I'm eager to listen.
Upvotes: 1