我有几个关于nhibernate的问题。
我仍然不明白上下文会话的含义。我做网络的东西,所以我只选择“网络”,但我真的不知道它在做什么。
我应该在Application_BeginRequest中放入session.BeginTransaction()吗?
我应该在Application_EndRequest中提交所有内容吗?或者我应该在需要时提交。假设我需要插入一个用户,然后在某些代码中向下,我需要更新其他一些表。我应该让用户进行更新然后最终提交,还是应该等到两个都准备好提交?
你应该总是在Application_EndRequest中有session.Rollback()吗?
我应该在Application_EndRequest中使用session.close()或session.dispose()吗?
答案 0 :(得分:1)
“网络”上下文表示每Session
每SessionFactory
只有一个“当前”HttpContext
(即每个请求)。绑定/解除绑定是你的责任。
如果你想要等同于1个请求== 1个交易,我会说这没关系。
请记住,会话是一个工作单元。虽然你可能在一个请求中有多个事务,但它并不常见,所以我说你应该在EndRequest上提交,除非出现错误(保持与第二个问题一致)
不一定。如果出现错误,您可以调用它,但处理它会产生相同的效果。
处理就足够了。
答案 1 :(得分:0)
有关上下文会话的信息,请查看此link。
至于你的其他问题,它们都是相关的。 Hibernate事务应该是原子的,而且,事务的范围及其会话应限于一个工作单元。换句话说,当您需要保留或检索某些内容并在完成后将其关闭时,您应该打开一个会话。
一般来说,将HOAnate的DAO设计模式与某种会话管理器结合使用可以为您提供单例会话,这是一种很好的做法。
我强烈建议在Hibernate会话和事务上阅读this article。它解释了我刚才所讨论的内容,并讨论了如何实现DAO模式。