关于nhibernate的问题

时间:2011-01-16 04:40:10

标签: nhibernate

我有几个关于nhibernate的问题。

  1. 我仍然不明白上下文会话的含义。我做网络的东西,所以我只选择“网络”,但我真的不知道它在做什么。

  2. 我应该在Application_BeginRequest中放入session.BeginTransaction()吗?

  3. 我应该在Application_EndRequest中提交所有内容吗?或者我应该在需要时提交。假设我需要插入一个用户,然后在某些代码中向下,我需要更新其他一些表。我应该让用户进行更新然后最终提交,还是应该等到两个都准备好提交?

  4. 你应该总是在Application_EndRequest中有session.Rollback()吗?

  5. 我应该在Application_EndRequest中使用session.close()或session.dispose()吗?

2 个答案:

答案 0 :(得分:1)

  1. “网络”上下文表示每SessionSessionFactory只有一个“当前”HttpContext(即每个请求)。绑定/解除绑定是你的责任。

  2. 如果你想要等同于1个请求== 1个交易,我会说这没关系。

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

  4. 不一定。如果出现错误,您可以调用它,但处理它会产生相同的效果。

  5. 处理就足够了。

答案 1 :(得分:0)

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

至于你的其他问题,它们都是相关的。 Hibernate事务应该是原子的,而且,事务的范围及其会话应限于一个工作单元。换句话说,当您需要保留或检索某些内容并在完成后将其关闭时,您应该打开一个会话。

一般来说,将HOAnate的DAO设计模式与某种会话管理器结合使用可以为您提供单例会话,这是一种很好的做法。

我强烈建议在Hibernate会话和事务上阅读this article。它解释了我刚才所讨论的内容,并讨论了如何实现DAO模式。