nhibernate - 如何关闭 NHibernate 的自动(脏检查)更新行为?

标签 nhibernate

我刚刚发现,如果我从 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.FlushModeFlushMode.Never .这将使您的操作明确

即:在 tx.Commit()session.Flush() .当然,这仍然会在提交/刷新时更新数据库。如果您不想要这种行为,请调用 session.Evict(yourObj)然后它会变成 transient ,NHibernate 不会为它发出任何 db 命令。

对您的编辑的回应:是的,那个人为您提供了更多关于如何控制它的选项。

关于nhibernate - 如何关闭 NHibernate 的自动(脏检查)更新行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/673564/

相关文章:

c# - 绕过聚合根

sql - NHibernate 的优缺点

c# - 将同一实体映射到不同的表

nhibernate - 如何设置 NHibernate 事务的超时时间

linq - LINQ查询问题

nhibernate - HQL 到 SQL 转换器

nhibernate - 我可以在不提交事务的情况下刷新我的 NHibernate session 并获得一个新 session 吗?

NHibernate - 查询特定列并返回不同的记录?

c# - OracleDataClientBatchingBatcherFactory 引发空引用异常

c# - 流畅的nhibernate Cascade创建新记录而不是更新它们