关于nhibernate的问题

关于nhibernate的问题,nhibernate,Nhibernate,我有几个关于nhibernate的问题 我还是不明白上下文会话是什么意思。我做网络的东西,所以我只选择“网络”,但我真的不知道它在做什么 我是否应该将session.BeginTransaction()放在应用程序_BeginRequest中 我应该提交应用程序请求中的所有内容吗?或者我应该在需要的时候承诺。假设我需要插入一个用户,然后在一些代码中,稍后我需要更新一些其他表。我应该创建用户并进行更新,然后最终提交,还是应该等到两者都准备好提交 应用程序_EndRequest中是否应该始终有ses

我有几个关于nhibernate的问题

  • 我还是不明白上下文会话是什么意思。我做网络的东西,所以我只选择“网络”,但我真的不知道它在做什么

  • 我是否应该将session.BeginTransaction()放在应用程序_BeginRequest中

  • 我应该提交应用程序请求中的所有内容吗?或者我应该在需要的时候承诺。假设我需要插入一个用户,然后在一些代码中,稍后我需要更新一些其他表。我应该创建用户并进行更新,然后最终提交,还是应该等到两者都准备好提交

  • 应用程序_EndRequest中是否应该始终有session.Rollback()

  • 我应该在应用程序中使用session.close()或session.dispose()还是同时使用两者


  • 有关上下文会话的信息,请查看此

    至于你的其他问题,它们都有点相关。Hibernate事务应该是原子的,但此外,事务及其会话的范围应限于一个工作单元。换句话说,您应该在需要持久化或检索某个内容时打开会话,并在完成后关闭会话

    通常,将Hibernate的DAO设计模式与某种会话管理器结合使用是一种很好的做法,它将为您提供一个单例会话


    我强烈推荐阅读Hibernate会话和事务。它更深入地解释了我刚才谈到的内容,并讨论了如何实现DAO模式。

    有关上下文会话的信息,请查看此

    至于你的其他问题,它们都有点相关。Hibernate事务应该是原子的,但此外,事务及其会话的范围应限于一个工作单元。换句话说,您应该在需要持久化或检索某个内容时打开会话,并在完成后关闭会话

    通常,将Hibernate的DAO设计模式与某种会话管理器结合使用是一种很好的做法,它将为您提供一个单例会话

    我强烈推荐阅读Hibernate会话和事务。它更深入地解释了我刚才谈到的内容,并讨论了如何实现DAO模式

  • “web”上下文表示每个
    会话工厂只能有一个“当前”会话(即每个请求)。你有责任把它捆好/解开

  • 不必太深入,我会说这很好,只要您想将1个请求==1个事务等同起来

  • 记住,会话是一个工作单元。虽然您可以在一个请求中有多个事务,但这并不常见,所以我建议您应该在EndRequest上提交,除非出现错误(与您的第二个问题保持一致)

  • 不一定。如果有错误,可以调用它,尽管处理它也会有相同的效果

  • 这就足够了

  • “web”上下文表示每个
    会话工厂只能有一个“当前”会话(即每个请求)。你有责任把它捆好/解开

  • 不必太深入,我会说这很好,只要您想将1个请求==1个事务等同起来

  • 记住,会话是一个工作单元。虽然您可以在一个请求中有多个事务,但这并不常见,所以我建议您应该在EndRequest上提交,除非出现错误(与您的第二个问题保持一致)

  • 不一定。如果有错误,可以调用它,尽管处理它也会有相同的效果

  • 这就足够了