我刚刚发现,如果我从 NHibernate session 中获取一个对象并更改对象的属性,NHibernate 将在提交时自动更新该对象,而无需我调用 Session.Update(myObj)
!
我可以看到这会有什么帮助,但作为默认行为,它似乎很疯狂!
更新:我现在理解持久性无知,所以这种行为现在显然是首选。我将把这个现在令人尴尬的问题留在这里,希望能帮助其他亵渎的用户。
我怎样才能阻止这种情况发生?这是默认的 NHibernate 行为还是来自 Fluent NHibernate 的 AutoPersistenceModel 的东西?
如果没有办法阻止这种情况,我该怎么办?除非我错过了这一点,否则这种行为似乎会造成困惑。
我正在使用 NHibernate 2.0.1.4 和 18/3/2009 的 Fluent NHibernate 构建
这家伙对吗his answer ?
我还读到覆盖事件监听器可能是解决此问题的方法。然而,IDirtyCheckEventListener.OnDirtyCheck
在这种情况下不会被调用。有谁知道我需要覆盖哪个监听器?
最佳答案
您可以设置 Session.FlushMode
至 FlushMode.Never
.这将使您的操作明确
即:在 tx.Commit()
或 session.Flush()
.当然,这仍然会在提交/刷新时更新数据库。如果您不想要这种行为,请调用 session.Evict(yourObj)
然后它会变成 transient ,NHibernate 不会为它发出任何 db 命令。
对您的编辑的回应:是的,那个人为您提供了更多关于如何控制它的选项。
关于nhibernate - 如何关闭 NHibernate 的自动(脏检查)更新行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/673564/