使用NHibernate确定哪些字段在持久化之前已更新(出于验证目的)

使用NHibernate确定哪些字段在持久化之前已更新(出于验证目的),nhibernate,change-tracking,Nhibernate,Change Tracking,在持续更新我的业务实体之前,我需要执行验证检查以确定哪些属性已更改。例如,某些字段只能在“Status”属性具有特定值时更新。例如,当订单实体的状态为“已完成”时,只能更新备注(字符串)字段。使用NHibernate这类事情可能发生吗?或者我应该自己跟踪业务实体中的变化吗?这类事情确实可能发生。《编码本能》有一篇很棒的帖子。如果我理解你想做什么,Gabriel的解决方案并不是你所需要的。如果不是,你可以试试。这些允许您钩住一个公共事件(如保存时),并在NHibernate完成保存/插入/更新/删

在持续更新我的业务实体之前,我需要执行验证检查以确定哪些属性已更改。例如,某些字段只能在“Status”属性具有特定值时更新。例如,当订单实体的状态为“已完成”时,只能更新备注(字符串)字段。使用NHibernate这类事情可能发生吗?或者我应该自己跟踪业务实体中的变化吗?

这类事情确实可能发生。《编码本能》有一篇很棒的帖子。

如果我理解你想做什么,Gabriel的解决方案并不是你所需要的。如果不是,你可以试试。这些允许您钩住一个公共事件(如保存时),并在NHibernate完成保存/插入/更新/删除之前进行一些处理。或者,您可以通过实现IInterceptor接口来研究如何使用拦截器。

谢谢您的回答。我更关心的是跟踪哪些字段被修改,并对这些字段应用验证规则。从表面上看,NHibernate.Validator似乎没有提供任何支持(如果我错了,请纠正我),我设法使用了我自己的IPreUpdateEventListener自定义实现。OnPreUpdate()方法包含PreUpdateEvent类型的参数,该参数包含旧状态和新状态。可以将这些属性进行比较,以确定哪些属性发生了更改。源代码可供索取,因为我需要更多的代表发表意见,你能发布你的代码吗?我的“OldState”数组始终为空。。。