Всем привет. Есть код: Код | 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
|