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

5
在ayende的关于NHibernate审计的博客评论中提到了需要使用session.GetSession(EntityMode.Poco)来创建一个子会话
据我所知,这与会话刷新时发出的SQL操作顺序有关。(例如:如果我想在pre-insert事件中执行一些删除操作,但是会话已经完成了删除操作,我需要一种方法来注入它们。) 然而,我没有找到关于此功能和行为的文档。 问题:
  • 我对子会话的理解正确吗?

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

  • 它们是否有文档记录?

  • 它们是否可以用于会话“作用域”?
    (例如:我打开了将保存某些数据的主会话,然后从主会话创建了2个子会话。我期望两个子范围将被分开,但它们将共享主会话缓存中的对象。这是真的吗?)

  • 它们是否是NHibernate中的一流公民,还是只是支持某些边缘情况的hack?

感谢提前提供任何信息。
1个回答

0

Stefando,

NHibernate不知道子会话,您可以重用现有的会话或打开新的会话。

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接