我想知道NHibernate中是否有任何类型的功能来检查是否已经对对象进行了更改,感觉它已被加载,需要写入DB来保存。
我还有一些其他的部分,比如当前选择的元素,等等可能会改变,但如果他们这样做,则在实际数据方面没有区别。
在WPF / C#中没有什么好办法来检查是否有需要保存的更改,这样我就可以在退出之前提示用户。
由于
答案 0 :(得分:0)
简短回答:您需要实施 your own "IsDirty" methods 。
NHibernate旨在发挥作用 没有强加任何要求 你的实体类。它有自己的作用 会话中的内部跟踪 是否被实体跟踪 会话很脏。虽然它会 好的,如果它暴露了一些方法 ISession检查实体是否 脏,没有解决变化 在实体的情况下向实体提出 脱离会话。
_
您的课程可以实施ICloneable 和IEquatable,然后你可以做一个 在允许之前克隆您的对象 然后,用户进行更改 然后将该克隆与该克隆进行比较 当前对象,看他们是否是 更长的时间。
如果您班级内的馆藏 还实现了ICloneable和 IEquatable,这个方法也可以让 你知道是否有什么变化 在层次结构的某个地方。
答案 1 :(得分:0)
您可以查询Session.IsDirty
,如果任何对象发生更改,它将返回true。
更复杂的方法是获取SessionImplementor,Persister,PersistenceContext和当前值,然后在那里使用FindDirty。
我不推荐它,但如果需要,我可以给你代码。最好在ViewModel级别跟踪它。