NHibernate 新手(我的免责声明)。我遇到了一个相似且有趣的 article regarding MVC但是,我更好奇在通用 Web 应用程序中管理 NHibernate session 的一般最佳实践是什么。
我遇到了 Burrow项目,但我开始意识到似乎有几个不同的方向可以采取。我知道 create a new SessionFactory 可能不符合我的最佳利益每次我需要接触数据库时,我都对社区如何管理 session 很感兴趣。你用Burrow吗?您是否将 SessionFactory 包装在单例中?
任何方向或见解总是非常感谢。
最佳答案
要直接回答您的问题,您的 ISessionFactory
对象应该是单例。您可以通过编程方式执行此操作(即通过将其包装在 C# 单例中)或通过在您的 IoC 容器中配置它。
至于 session ,Burrow 看起来不错,但是 Web 应用程序中最主要和最简单的 session 模式 - OpenSessionInView - 随 NHibernate 2.0.0 开箱即用。也就是说,您的数据访问代码调用 ISessionFactory.GetCurrentSession()
而不是 ISessionFactory.OpenSession()
。然后,您通过指定 ICurrentSessionContext
的实现来说明工厂的当前 session 是如何管理的。 NHibernate 提供了两个开箱即用的方法,用于将 session 与 Web 请求对齐。这在文档中称为“上下文 session ”。
毫无疑问,更复杂的 Web 应用程序可能需要更持久的对话以及复杂的延迟加载等,但对于标准的 Web 应用程序,NHibernate 上下文 session 应该足够了。
关于c# - ASP.NET 中的 FluentNHibernate session 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1428793/