Правильный способ начальной загрузки NHibernate в MVC - PullRequest
2 голосов
/ 09 сентября 2010

Мне нужно настроить управление сессиями в MVC.Как правильно это сделать?Как настроить управление сессиями nhibernate в mvc, используя Structuremap, чтобы я не получал:

Сеанс закрыт или Использование одного сеанса в нескольких потоках, вероятно, ошибка.

Моя текущая конфигурация:в GlobalAssax:

protected void Application_Start()
    {
        ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory());
        Bootstrapper.ConfigureStructureMap();
        AreaRegistration.RegisterAllAreas();
        RegisterRoutes(RouteTable.Routes);

    }

в моем BootStrapper я делаю:

var cfg = NHibernateManager.Configuration(assembly);
For<Configuration>().Singleton().Use(cfg);
For<ISessionFactory>().Singleton().Use(cfg.BuildSessionFactory());
For<ISession>().HttpContextScoped().Use(ctx => ctx.GetInstance<ISessionFactory>().OpenSession());

Я внедряю ISession в репозитории, которые я использую на прикладном уровне.

Редактировать: Что произойдет, еслиЯ делаю это ?: For (). LifecycleIs (Lifecycles.GetLifecycle (InstanceScope.PerRequest)). Использование (ctx => ctx.GetInstance (). OpenSession ());

1 Ответ

0 голосов
/ 09 сентября 2010

Вы добавили распоряжение для сессии?

//In Global.asax.cs
protected void Application_EndRequest()
{
    ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}

В противном случае это выглядит правильно.

...