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

 
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;
        }

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

Kommentare werden nicht hinzugefügt

Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
  m9yt
advanced
Absenden