c# - NHibernate 映射属性 + 脏检查

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

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

如有任何帮助,我们将不胜感激!

最佳答案

首先,这不是你应该做的事情。 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 的内部状态保持正确并且实体变得不脏。

关于c# - NHibernate 映射属性 + 脏检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4035241/

相关文章:

c# - CRM 插件 : Custom Exception in Sandbox

c# - 如果列表不为空,则将拦截添加到查询

c# - 获取 ASP :Menu to center in the middle of the page

c# - 我如何模拟或类似地注入(inject)对应用于 NHibernate session 的查询扩展方法的替换

nhibernate - 查询开始于

c# - 使用百分号在 DataTable 中添加计算列的表达式

c# - 使用 EF Core 重用 MVVM 模式中的 View

c# - 在方法签名中使用 params [] 是个坏主意吗

c# - 使用 C# 在 dotNet 3.0+ 中内联函数?

c# - 从 nHibernate 获取执行的 SQL