ASP.NET中的FluentNHibernate会话管理

时间:2009-09-15 18:10:09

标签: c# nhibernate singleton sessionfactory nhibernate-burrow

NHibernate的新手(我的免责声明)。我遇到了类似且有趣的article regarding MVC,但是,我对在通用Web应用程序中管理NHibernate会话的一般最佳实践更为好奇。

我遇到了Burrow项目,但我开始意识到似乎有几个不同的方向。我知道每次我需要触摸数据库时,create a new SessionFactory可能不符合我的最佳利益,因此我对社区管理会话的工作感兴趣。你用Burrow吗?你是否将SessionFactory包装成单身?

任何方向或见解总是非常受欢迎。

2 个答案:

答案 0 :(得分:5)

要直接回答您的问题,您的ISessionFactory对象应该是单身。您可以通过编程方式(即将其包装在C#单例中)或在IoC容器中进行配置。

至于会话,Burrow看起来不错,但是Web应用程序中会话的最优和最简单的模式 - OpenSessionInView - 与NHibernate 2.0.0开箱即用。也就是说,您的数据访问代码会调用ISessionFactory.GetCurrentSession()而不是ISessionFactory.OpenSession()。然后,通过指定ICurrentSessionContext的实现,说明如何管理工厂的当前会话。 NHibernate提供了两个开箱即用的功能,用于将会话与Web请求进行对齐。这在文档中称为“上下文会话”。

毫无疑问,更复杂的Web应用程序可能需要更复杂的延迟加载等更持久的对话,但对于标准Web应用程序,NHibernate上下文会话应该足够了。

答案 1 :(得分:2)

我就NHibernate / Fluent NHibernate数据访问模式撰写了一系列有关此主题的博客文章。

我建议的第一个是抽象出NHibernate的交互。

Creating a common generic and extensible NHiberate Repository

然后,为了处理会话管理,我实现了“每个业务对话​​的会话”模式,而不是在单个页面请求的生命周期中存在NH会话,这是一个普遍存在的一系列事件,例如一个页面,允许您对表单进行一系列编辑,然后在最后永久应用它们或取消它们。

Conversation Per Business Transaction using PostSharp and IoC

如果我今天要写这篇文章,我不会再次使用PostSharp来处理项目中的AOP(面向方面​​编程)代码我要么使用Linfu.AOP或其他框架来执行AOP相互作用。

相关问题