Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не открывается новая сессия 
:(
    Опции темы
m9yt
Дата 27.3.2013, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 27.2.2010

Репутация: нет
Всего: нет



Всем привет. Есть код:
Код

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

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

Это сообщение отредактировал(а) m9yt - 27.3.2013, 11:04
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0680 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.