2014-02-11 74 views
1

我需要能夠在對數據庫進行任何修改(創建,更新,刪除)之前驗證實體上的一些業務規則,並在這些規則失敗時拋出異常和回滾。我正在構建一個框架,並且我總是這麼做,儘管用戶是使用我的類來修改實體還是直接使用NHibernate Session。我還需要能夠定製這些業務規則,具體取決於配置文件。驗證NHibernate中修改前的實體

我試圖繼承DefaultSaveOrUpdateEventListener,覆蓋PerformSaveOrUpdatePerformUpdatePerformSaveOrReplicatePerformSaveOnSaveOrUpdateDefaultSaveEventListener與壓倒一切的PerformSaveOrUpdatePerformSavePerformSaveOrReplicatePerformUpdateOnSaveOrUpdate。我只是把Debug.WriteLine,並稱爲基地實施。我沒有找到任何好的和詳細的描述,所以我嘗試了一切,看起來像我需要的東西。

而且我喜歡這個初始化它們:

configuration.EventListeners.SaveOrUpdateEventListeners[0] = new SaveOrUpdatePermissionListener(_mappingContext); 
configuration.EventListeners.SaveEventListeners[0] = new SavePermissionListener(_mappingContext); 

不過貌似這並不總是工作。如果我修改對象樹中的對象,由於某些原因,這些方法會捕獲除根對象以外的所有對象。

我做錯了什麼?也許有更好的方式做我想做的事情?

回答

1

能夠做到這一點,通過繼承IPreUpdateEventListener, IPreDeleteEventListener, IPreInsertEventListener接口而不是DefaultSaveOrUpdateEventListenerDefaultSaveEventListener

不過,如果任何人有更好的主意來完成任務,我很想聽。

+0

找到了這個網站,如果有幫助:http://codebetter.com/petervanooijen/2015/04/13/using-nhibernate-eventlisteners-to-validate-and-audit-data/ – shankbond