NHibernate:什么是子会话以及为什么以及何时应该使用它们?

ste*_*ndo 5 nhibernate

在ayende 博客关于NHibernate审计的评论中,提到了使用子会话的必要性:session.GetSession(EntityMode.Poco).

据我所知,它与session.Flush将发出的SQL操作的顺序有关. (例如:如果我想在插入前事件中执行一些删除操作,但会话已经完成了删除操作,我需要一些方法将它们注入.)

但是,我没有找到有关此功能和行为的文档.

问题:

  • 我对儿童会话的理解是否正确?

  • 我应该如何以及在哪些场景中使用它们?

  • 它们是否在某处记录?

  • 他们可以用于会议"范围界定"吗?
    (例如:我打开主会话,它将保存一些数据,然后我从主数据库中创建2个子会话.我希望这两个子范围将被分开但是将从主会话缓存共享对象是这样的吗?)

  • 他们是NHibernate的一等公民还是他们只是支持一些边缘情况?

在此先感谢您的任何信息.

小智 0

斯特凡多,

NHibernate 不了解子会话,您可以重用现有会话或打开一个新会话。

例如,如果您尝试将同一实体加载到两个不同的会话中,您将收到异常。

之所以在博客中提到它,是因为在预更新和预插入中,您无法在会话中加载更多对象,您可以更改已加载的实例,但您可能无法导航到关系属性。

因此,在博客中,需要打开一个新会话,只是因为我们要添加新的审核日志实体。所以最终是管理数据的事务(工作单元)。