我有问题NHibernate更新我的一些实体,当这不应该发生(脏检查)。 当我使用NHibernate.Mapping.Attributes映射我的类时,我发现有一个参数“Check”到NHMA的元素“Class”。我想知道是否可以通过将此参数设置为false或其他东西来关闭脏检查(此参数所需的类型为字符串,因此可能不是这样)。
任何帮助将不胜感激!
答案 0 :(得分:5)
首先,这不是你应该做的事情。 NHibernate尝试最好的做脏检查正确的东西。如果NHibernate认为它很脏,那可能就是这样。试着找出你对实体做出了哪些改变,导致NHibernate认为它很脏,看看你是否可以通过调整它来解决你的问题。
那说,有一个解决方案。 NHibernate使用在插入和更新之前触发的侦听器。有关此问题的更多信息,请访问http://ayende.com/Blog/archive/2009/04/29/nhibernate-ipreupdateeventlistener-amp-ipreinserteventlistener.aspx,http://www.codinginstinct.com/2008/04/nhibernate-20-events-and-listeners.html和many other locations。
事件侦听器本身具有返回值。这个返回值的作用是告诉NHibernate是否执行实际的插入/更新SQL查询。当您返回false
时,它会执行它们。当您返回true
时,它不会。这样就可以抑制数据库的实际持久性。
这种方法的好处在于NHibernate所关注的,它认为实体实际上是持久化的,因此NHibernate的内部状态保持正确,实体变得不那么脏。