【问题标题】:NHibernate: What are child sessions and why and when should I use them?NHibernate:什么是子会话,为什么以及何时应该使用它们?
【发布时间】:2011-01-15 09:50:32
【问题描述】:

在 ayende 的 blog 关于 NHibernate 审计的 cmets 中提到需要使用 子会话:session.GetSession(EntityMode.Poco)

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

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

问题:

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

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

  • 它们是否记录在某处?

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

  • 他们是 NHibernate 中的一等公民,还是只是为了支持某些极端情况而进行黑客攻击?

提前感谢您提供任何信息。

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    斯特凡多,

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-09-17
      • 1970-01-01
      • 2014-05-27
      • 2014-11-02
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 2011-06-07
      • 2010-12-10
      相关资源
      最近更新 更多