ASP.NET MVC的SessionFactory如何与nHibernate结合实现永久性配置?
- 内容介绍
- 文章标签
- 相关推荐
本文共计425个文字,预计阅读时间需要2分钟。
在使用Fluent+nHibernate和ASP.NET MVC构建应用程序时,我发现保持永久的SessionFactory开启是最合适的做法。这样做可以避免每次数据库请求时都创建和关闭SessionFactory,从而提高性能。然而,这也意味着每个数据库请求都会使用相同的SessionFactory,可能导致并发问题。所以,这种方法需要谨慎使用,并确保对数据库请求进行适当的同步。
我一直在使用Fluent nHibernate / ASP.NET MVC构建一个应用程序 – 我已经挖掘并发现,保持“永久”SessionFactory打开是最合适的做法,然后对每个数据库请求使用会话.好的,听起来不错……不过,我对如何实现这一点感到很困惑.我找到的所有东西都假定了一个完整的结构化框架,它使用了某种IoC容器系统……而且这对我目前所拥有的东西来说太先进了.有没有更简单的例子来说明如何实现这种设计?
我看过Where can I find a good NHibernate and ASP.NET MVC Reference Application
甚至阅读“ASP.NET MVC in Action”这本书,但它的例子远比我想要实现的要复杂得多.我认为单例模型可以在’global.asax’的Application_Start中工作,但这并没有产生我希望的结果.它将继续处理我的工厂,永远不会重新创建它.
您可以将ISessionFactory公开为单例:public sealed class FactoryManager { private static readonly ISessionFactory _instance = CreateSessionFactory(); static FactoryManager() { } public static ISessionFactory Instance { get { return _instance; } } private static ISessionFactory CreateSessionFactory() { // TODO: configure fluentnhibernate and create a session factory } }
现在您可以在代码中使用FactoryManager.Instance:
using (var session = FactoryManager.Instance.OpenSession()) using (var tx = session.BeginTransaction()) { // TODO: use the session here tx.Commit(); }
本文共计425个文字,预计阅读时间需要2分钟。
在使用Fluent+nHibernate和ASP.NET MVC构建应用程序时,我发现保持永久的SessionFactory开启是最合适的做法。这样做可以避免每次数据库请求时都创建和关闭SessionFactory,从而提高性能。然而,这也意味着每个数据库请求都会使用相同的SessionFactory,可能导致并发问题。所以,这种方法需要谨慎使用,并确保对数据库请求进行适当的同步。
我一直在使用Fluent nHibernate / ASP.NET MVC构建一个应用程序 – 我已经挖掘并发现,保持“永久”SessionFactory打开是最合适的做法,然后对每个数据库请求使用会话.好的,听起来不错……不过,我对如何实现这一点感到很困惑.我找到的所有东西都假定了一个完整的结构化框架,它使用了某种IoC容器系统……而且这对我目前所拥有的东西来说太先进了.有没有更简单的例子来说明如何实现这种设计?
我看过Where can I find a good NHibernate and ASP.NET MVC Reference Application
甚至阅读“ASP.NET MVC in Action”这本书,但它的例子远比我想要实现的要复杂得多.我认为单例模型可以在’global.asax’的Application_Start中工作,但这并没有产生我希望的结果.它将继续处理我的工厂,永远不会重新创建它.
您可以将ISessionFactory公开为单例:public sealed class FactoryManager { private static readonly ISessionFactory _instance = CreateSessionFactory(); static FactoryManager() { } public static ISessionFactory Instance { get { return _instance; } } private static ISessionFactory CreateSessionFactory() { // TODO: configure fluentnhibernate and create a session factory } }
现在您可以在代码中使用FactoryManager.Instance:
using (var session = FactoryManager.Instance.OpenSession()) using (var tx = session.BeginTransaction()) { // TODO: use the session here tx.Commit(); }

