我正在构建一个Web应用程序,每当我进行数据库调用时,我都需要一个会话。
我理解创建会话对象非常昂贵。
他使用一种名为UnitOfWork的东西来获取会话。
对于Web应用程序,我不应该在Request.Items集合中存储Session吗?所以每次请求只创建一次?
我真的需要UofW吗?
答案 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)