在ayende的blog关于NHibernate审核的评论中,提到需要使用子会话:session.GetSession(EntityMode.Poco)
。
据我了解,它与session.Flush将发出的SQL操作的顺序有关。 (例如:如果我想在插入前事件中执行一些删除操作,但会话已经完成了删除操作,我需要一些方法将它们注入。)
但是我没有找到有关此功能和行为的文档。
问题:
我对儿童会话的理解是否正确?
我应该如何以及在哪种情况下使用它们?
他们是否记录在某处?
他们可以用于会议“范围界定”吗? (例如:我打开主会话,它将保存一些数据,然后我从主数据库中创建2个子会话。我希望这两个子范围将被分开但是将共享来自主会话缓存。是这种情况吗?)
他们是NHibernate的一等公民还是他们只是支持一些边缘案例?
提前感谢任何信息。
答案 0 :(得分:0)
Stefando,
NHibernate不了解子会话,您可以重用现有会话或打开新会话。
例如,如果您尝试将同一实体加载到两个不同的会话中,则会出现异常。
博客中提到它的原因是因为在preupdate和preinsert中,您无法在会话中加载更多对象,您可以更改已经加载的实例,但您可能无法导航到关系属性。 / p>
因此,在博客中需要打开一个新会话,因为我们想要添加一个新的审计日志实体。所以最终它是管理数据的事务(工作单元)。