我正在尝试将 NHibernate 与未使用 NHibernate 映射的遗留实体一起使用。有时这意味着我需要手动将 NHibernate 数据刷新到数据库,这样当我尝试将遗留实体与 NHibernate 映射的实体连接时,我就不会收到外键异常。
当这发生在需要回滚的事务中时,就会出现问题。从 NHibernate 刷新的数据不会回滚。
对此我能做些什么吗?
更新
仍然很好奇如何做到这一点 - 我不相信给出的任何一个答案都可以解决这个问题。我需要调用 Flush()。问题是,如何回滚已刷新的数据?
最佳答案
检查这个:Force query execution without flush/commit
我似乎有同样的问题,我会刷新然后我会回滚,但一些数据会保留在数据库中。但是,我的代码中有一些部分会调用提交,并且无法回滚。将接受的答案的代码片段视为事务、刷新、回滚和提交的正确用法,并考虑到这种模式可以扩展......
在单个工作单元中(即,我们将 Web 应用程序中的请求视为单个工作单元,并且该请求中发生的所有内容都存在于提交 onEndRequest 的单个事务中):
_sessionFactory.OpenSession()
, _session.BeginTransaction()
, _session.CommitTransaction()
和 _session.CloseSession()
只有一次。 _session.Flush()
和 _session.RollBackTransaction()
任意多次,但 Flush() 会在 Commit 上自动调用。当您需要进行查询并确保获取的数据不会过时时,您可能需要调用 Flush。 您已经在跟踪一致性和可能的逻辑完整性时遇到了问题
从 1.2 开始,所有版本的 NHibernate 都对第 1 点到第 4 点进行了测试。
关于nhibernate - 刷新 NHibernate,同时仍然允许事务回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1761026/