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

标签 nhibernate

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

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

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

问题:

  • 我对子 session 的理解是否正确?
  • 我应该如何以及在哪些场景中使用它们?
  • 他们是否记录在某处?
  • 它们可以用于 session “范围”吗?
    (例如:我打开将保存一些数据的主 session ,然后从主 session 创建 2 个子 session 。我希望这两个子范围将分开,但将从主 session 缓存中共享对象. 是这样吗?)
  • 他们是 NHibernate 中的一等公民,还是只是为了支持一些极端情况而进行黑客攻击?

  • 在此先感谢您的任何信息。

    最佳答案

    斯特凡多,

    NHibernate 不知道子 session ,您可以重用现有的 session 或打开一个新 session 。

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

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

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

    关于NHibernate:什么是子 session ,为什么以及何时应该使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4698939/

    相关文章:

    c# - Nhibernate Group By 和 Alias To Bean

    nhibernate - 如何在nhibernate中使用存储过程

    NHibernate:有条件地加载计算列

    c# - 需要帮助来理解这个 C# 泛型类

    c# - 对 MembershipUser 的流畅 NHibernate 引用

    c# - 如何从交易建议中排除方法?

    java - Hibernate比NHibernate更糟吗?

    nhibernate - 使用 Fluent NHibernate 和 NHibernate 3 将枚举映射为 Int

    c# - 使用 session 和延迟加载

    wcf - 使用 Silverlight、WCF 和 nHibernate 的多层架构