2010-10-27 100 views
1

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

任何帮助,将不胜感激!

回答

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.htmlmany other locations中找到。

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

这种方法的好处是,在NHibernate方面,它认为实体实际上是持久的,所以NHibernate的内部状态保持正确,实体变得不脏。

+0

好吧我会检查 – Hal 2010-10-28 07:44:05