currentsessioncontext свободно владеет nhibernate как это сделать? - PullRequest
8 голосов
/ 16 января 2011

Я пытаюсь свободно использовать сеанс для каждого запроса.Я следую «рецепту» из кулинарной книги nhibernate, однако она использует конфигурационный файл nhibernate.

Я не уверен, что лучше, но сейчас я придерживаюсь свободно конфигурируемого только потому, что не знаю, как установитьФайл конфигурации nhibernate для использования плавного отображения и ванильного отображения nhibernate (файлы hbm).

namespace Demo.WebUI
{
    public class MvcApplication : NinjectHttpApplication
    {
        public static ISessionFactory SessionFactory { get; private set; }

        protected override void OnApplicationStarted()
        {
            SessionFactory = Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2008.ConnectionString(
                    c => c.FromConnectionStringWithKey("test")))
                .Mappings(m => m.FluentMappings
                    .AddFromAssemblyOf
                     <Demo.Framework.Data.NhibernateMapping.UserMap>())
                .ExposeConfiguration(BuidSchema)
                .BuildSessionFactory();
        }

        protected void Application_BeginRequest(object sender, EventArgs e)
        {
            var session = SessionFactory.OpenSession();
            //CurrentSessionContext.Bind(session);
        }

        protected void Application_EndRequest(object sender, EventArgs e)
        {
            //var session = CurrentSessionContext.Unbind(SessionFactory);
            SessionFactory.Dispose();
        }
    }
}

Как вы можете видеть в Begin_Request, учебник по учебникам содержал

CurrentSessionContext.Bind(session);

Однако, если я использую этовыдает ошибку, поскольку у меня нет используемого файла конфигурации nhibernate.

Так как мне изменить его, чтобы использовать свободную конфигурацию?Или мне даже не нужно делать этот шаг? (Т. Е. Выполняется ли он внутренне?)

Ответы [ 2 ]

12 голосов
/ 16 января 2011

Вы должны указать NHibernate, как обрабатывать контекст сеанса.Может работать следующее:

Fluently.Configure()
        ...
        .ExposeConfiguration(cfg => cfg.SetProperty(
                                        Environment.CurrentSessionContextClass,
                                        "web")

Кроме того, не имеет отношения к этому: вы используете SessionFactory в EndRequest.Это ошибка.

0 голосов
/ 05 сентября 2014

Если ваш проект является веб-сайтом Asp.Net (не веб-приложением), в Global.asax вы должны использовать это

NHibernate.Cfg.Environment.CurrentSessionContextClass

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...