是否可以使用PreTranctionCommint事件中的Nhibernate驗證框架驗證域模型?如果可能的話,我們如何寫這個活動?下面NHibernate和NHibernate驗證
回答
摘自http://nhforge.org/wikis/validator/nhibernate-validator-1-0-0-documentation.aspx
基於事件NHibernate的驗證採取
NHibernate的驗證器有兩個內置NHibernate的事件偵聽器。 每當PreInsertEvent或PreUpdateEvent發生時,偵聽器將 驗證實體實例的所有約束,並在違反任何約束時拋出異常 。基本上,對象將在 任何插入之前以及由NHibernate觸發的任何更新之前進行檢查。這 包括級聯更改!這是激活驗證過程的最方便和最簡單的方法。如果違反約束,則該事件將引發一個運行時InvalidStateException,其中包含描述每個故障的InvalidValues數組。
是否可以驗證與NHibernate驗證 框架的域模型...?
如果你真的有domain model那麼它不需要驗證框架。換句話說,這些對象封裝了行爲並保護了它們的內部不變量而不依賴於外部的魔法驗證框架。域對象永遠不會進入first place中的「無效」狀態。如果他們長壽,那麼他們也應該「永遠堅持」。你的域對象的有效性不應該依賴於數據訪問庫可能或不可能觸發的事件。您也可以發現不考慮驗證是有幫助的,因爲它是過度廣義化和上下文相關的,而是考慮業務對象INVARIANTS。您不需要第三方框架來在對象中正確執行不變量。如果不將域類耦合到驗證框架,實現它並不難。
但是,如果你改一下你的問題:
是否可以驗證與NHibernate驗證 框架anemic域模型...?
然後答案是:是的,去吧,它太棒了!但請記住,隨着複雜性的增長,您希望執行更復雜的涉及多個對象字段,獨立域服務等的複雜域規則。您將通過編寫「自定義驗證器」或者只是放棄它而越來越多地與驗證框架耦合並最終實現了由框架和其他遍佈代碼庫的一些規則。一般來說,這可能值得一看answer和DDD。
這個怎麼樣?
using(transaction...)
{
validationA();
validationB();
session.saveOrUpdate();(do some transaction)
}
請用解釋擴展您的答案。 –
- 1. Nhibernate的Nhibernate驗證器3.1
- 2. Nhibernate驗證器
- 3. 升級NHibernate和NHibernate的驗證瓦特/的NuGet
- 4. NHibernate DecimalMin驗證程序
- 5. NHibernate驗證器性能
- 6. NHibernate驗證與流利
- 7. nhibernate驗證器用法
- 8. NHibernate的,驗證邏輯和AutoDirtyCheck
- 9. NHibernate - 驗證和交易的問題
- 10. WPF IDataErrorInfo和NHibernate驗證 - 如何觸發驗證?
- 11. nHibernate驗證器自定義IMessageInterpolator
- 12. 驗證NHibernate標準的內容
- 13. NHibernate驗證器做數據庫查找
- 14. NHibernate驗證器動態規則
- 15. 從xVal切換到nHibernate驗證
- 16. 使用Spring.net設置NHibernate驗證器
- 17. NHibernate的驗證器初始化是ValidatorMode.OverrideAttributeWithExternal
- 18. 雙NHibernate類級別驗證器問題
- 19. 流利Nhibernate和Nhibernate 2.1.0.1003
- 20. NHibernate驗證器 - 如何驗證枚舉類型
- 21. NHibernate驗證器中的業務規則驗證
- 22. 優先考慮NHibernate驗證器對內置驗證的驗證嗎?
- 23. NHibernate驗證器和架構導出問題
- 24. fluentnhibernate和nhibernate驗證程序版本錯誤
- 25. NHibernate的驗證 - 通過資源管理器和關鍵
- 26. MVC 3,NHIbernate驗證器和消息插值器
- 27. NHibernate和Oracle通過Windows身份驗證連接
- 28. 使用WCF和NHibernate進行自定義身份驗證
- 29. ASP.NET MVC和NHibernate的用戶身份驗證
- 30. 如何映射與NHibernate(和功能NHibernate)
感謝Cole W.有可能在事務提交事件上編寫我們自己的偵聽器。如果是的話,這是正確的方式來驗證這個事件? – viky
如果您將nhibernate驗證器設置爲與nhibernate集成,您的實體將在Commit上進行驗證。 –