Не открывается новая сессия

 
0
 
.NET
ava
m9yt | 27.03.2013, 11:55
Всем привет. Есть код:

public sealed class NHibernateHelper
    {
        private static ISessionFactory sessionFactory;
        private const string CurrentSessionKey = "nhibernate.current_session";

        public static ISession CurrentSession
        {
            get
            {
                return GetSession(true);
            }
        }

        static NHibernateHelper()
        {
        }

        public static void Init()
        {
            sessionFactory = new Configuration().Configure("hibernate.cfg.xml").BuildSessionFactory();
        }

        public static void Close()
        {
            ISession currentSession = GetSession(false);

            if (currentSession != null)
            {
                currentSession.Close();
            }
        }
       
        public static ISession GetSession(bool getNewIfNotExists)
        {
            ISession currentSession = CallContext.GetData(CurrentSessionKey) as ISession;

            if (currentSession == null && getNewIfNotExists)
            {
                currentSession = sessionFactory.OpenSession();
                CallContext.SetData(CurrentSessionKey, currentSession);
            }

            return currentSession;
        }
    }

И 2 функции:

        public void AddNaturalPerson(NaturalPerson person)
        {
            NHibernateHelper.Init();
            ISession session = NHibernateHelper.CurrentSession;

            ITransaction transaction = session.BeginTransaction();
            session.Save(person);
            transaction.Commit();

            //session.Flush();
            //session.Clear();

            NHibernateHelper.Close();
        }

        public IList<NaturalPerson> GetAllNaturalPersons()
        {
            IList<NaturalPerson> persons = new List<NaturalPerson>();

            NHibernateHelper.Init();
            ISession session = NHibernateHelper.CurrentSession;

            ITransaction transaction = session.BeginTransaction();
            persons = session.CreateCriteria(typeof(NaturalPerson)).List<NaturalPerson>();
            transaction.Commit();

            //session.Flush();
            //session.Clear();

            NHibernateHelper.Close();
            return persons;
        }

Так вот, при выполнении любой из этих функций и запуске второй,
CallContext.GetData(CurrentSessionKey) as ISession возвращает, что сессия "не мертва" и новая не открывается.
Следовательно, данные не сохраняются.
Т.е. в функции GetSession при повторном ее вызове сессия не открывается:

public static ISession GetSession(bool getNewIfNotExists)
        {
            ISession currentSession = CallContext.GetData(CurrentSessionKey) as ISession; //вот тут не null

            if (currentSession == null && getNewIfNotExists)
            {
                currentSession = sessionFactory.OpenSession();
                CallContext.SetData(CurrentSessionKey, currentSession);
            }

            return currentSession;
        }

Есть идеи, почему так?
Ответы (0)

Комментарии не добавлены

Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
  m9yt
advanced
Отправить