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

时间:2011-01-15 09:50:32

标签: nhibernate

在ayende的blog关于NHibernate审核的评论中,提到需要使用子会话session.GetSession(EntityMode.Poco)

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

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

问题:

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

  • 我应该如何以及在哪种情况下使用它们?

  • 他们是否记录在某处?

  • 他们可以用于会议“范围界定”吗? (例如:我打开主会话,它将保存一些数据,然后我从主数据库中创建2个子会话。我希望这两个子范围将被分开但是将共享来自主会话缓存。是这种情况吗?)

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

提前感谢任何信息。

1 个答案:

答案 0 :(得分:0)

Stefando,

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

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

博客中提到它的原因是因为在preupdate和preinsert中,您无法在会话中加载更多对象,您可以更改已经加载的实例,但您可能无法导航到关系属性。 / p>

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