是否可以使用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上进行验证。 –