在 ayende 的 blog 的评论中关于 NHibernate 中的审计,提到需要使用 子 session : session.GetSession(EntityMode.Poco)
.
据我了解,它与 session.Flush 将发出的 SQL 操作的顺序有关。 (例如:如果我想在预插入事件中执行一些删除操作,但 session 已经完成了删除操作,我需要一些方法来注入(inject)它们。)
但是我没有找到有关此功能和行为的文档。
问题:
(例如:我打开将保存一些数据的主 session ,然后从主 session 创建 2 个子 session 。我希望这两个子范围将分开,但将从主 session 缓存中共享对象. 是这样吗?)
在此先感谢您的任何信息。
最佳答案
斯特凡多,
NHibernate 不知道子 session ,您可以重用现有的 session 或打开一个新 session 。
例如,如果您尝试将同一个实体加载到两个不同的 session 中,您将得到一个异常。
之所以在博客中提到它,是因为在 preupdate 和 preinsert 中,您无法在 session 中加载更多对象,您可以更改已加载的实例,但您可能无法导航到例如关系属性。
所以在博客中需要打开一个新 session 只是因为我们想添加一个新的审计日志实体。所以最终是事务(工作单元)管理数据。
关于NHibernate:什么是子 session ,为什么以及何时应该使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4698939/