NHibernate映射属性+脏检查

时间:2010-10-27 16:06:56

标签: c# nhibernate .net-3.5 nhibernate-mapping

我有问题NHibernate更新我的一些实体,当这不应该发生(脏检查)。 当我使用NHibernate.Mapping.Attributes映射我的类时,我发现有一个参数“Check”到NHMA的元素“Class”。我想知道是否可以通过将此参数设置为false或其他东西来关闭脏检查(此参数所需的类型为字符串,因此可能不是这样)。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:5)

首先,这不是你应该做的事情。 NHibernate尝试最好的做脏检查正确的东西。如果NHibernate认为它很脏,那可能就是这样。试着找出你对实体做出了哪些改变,导致NHibernate认为它很脏,看看你是否可以通过调整它来解决你的问题。

那说,有一个解决方案。 NHibernate使用在插入和更新之前触发的侦听器。有关此问题的更多信息,请访问http://ayende.com/Blog/archive/2009/04/29/nhibernate-ipreupdateeventlistener-amp-ipreinserteventlistener.aspxhttp://www.codinginstinct.com/2008/04/nhibernate-20-events-and-listeners.htmlmany other locations

事件侦听器本身具有返回值。这个返回值的作用是告诉NHibernate是否执行实际的插入/更新SQL查询。当您返回false时,它会执行它们。当您返回true时,它不会。这样就可以抑制数据库的实际持久性。

这种方法的好处在于NHibernate所关注的,它认为实体实际上是持久化的,因此NHibernate的内部状态保持正确,实体变得不那么脏。