nhibernate和会议,请澄清

时间:2009-08-14 22:21:00

标签: nhibernate fluent-nhibernate

我正在构建一个Web应用程序,每当我进行数据库调用时,我都需要一个会话。

我理解创建会话对象非常昂贵。

我在这里关注存储库模式:http://web.archive.org/web/20110503184234/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/10/08/the-repository-pattern.aspx

他使用一种名为UnitOfWork的东西来获取会话。

对于Web应用程序,我不应该在Request.Items集合中存储Session吗?所以每次请求只创建一次?

我真的需要UofW吗?

3 个答案:

答案 0 :(得分:2)

会话是工作单元 - 它主要用于存储更改,直到将它们刷新到数据库。在启动时保存静态会话工厂,并使用它来为每个Web请求创建一个会话 - Request.Items似乎是放置会话的有效位置。

存储库模式是工作单元的包装器。存储库模式与UoW模式的不同之处在于repo.Save(obj)应该立即将obj保存到db,而UoW则等待刷新。

我的建议是跳过存储库模式并直接使用ISession(参见http://ayende.com/Blog/archive/2009/04/17/repository-is-the-new-singleton.aspx

答案 1 :(得分:0)

在NHibernate的情况下,关键类是SessionFactory,SessionProvider正在为你处理(如果你这样实现它)。使SessionFactory保持活动状态,并为您处理会话。

我似乎也有人将SessionFactory保存在他们的IoC中。

答案 2 :(得分:0)

使用它来管理你的会话:

HybridSessionBuilder

它管理并允许您访问在整个应用程序中使用的单个会话。