powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Не открывается новая сессия
5 сообщений из 5, страница 1 из 1
Не открывается новая сессия
    #38200199
Volik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Есть код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
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 функции:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
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 при повторном ее вызове сессия не открывается:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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 / 0
Не открывается новая сессия
    #38201260
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Volik,

а почему вы думаете, что должна открываться новая сессия, по коду чётко видно, что берётся старая
...
Рейтинг: 0 / 0
Не открывается новая сессия
    #38201295
Volik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pationVolik,

а почему вы думаете, что должна открываться новая сессия, по коду чётко видно, что берётся старая
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
 public static void Close()
        {
            ISession currentSession = GetSession(false);

            if (currentSession != null)
            {
                currentSession.Close();
            }
        }


Ну вот в этом куске кода она закрывается. А дальше,
вот сюда
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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;
        }
...
Рейтинг: 0 / 0
Не открывается новая сессия
    #38201297
Volik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не заходит именно при 2 и дальнейшем использовании сессии.
...
Рейтинг: 0 / 0
Не открывается новая сессия
    #38207226
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Volik,

из кода
if (currentSession == null && getNewIfNotExists)
видно, что проверка идёт только на отсутствие, а то что присутсвует закрытая не проверяется
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Не открывается новая сессия
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]