Почему состояние сеанса NHibernate всегда открыто - PullRequest
0 голосов
/ 13 апреля 2020

Я использую SessionFactory.GetCurrentSession (), чтобы получить сессию. Согласно инструкции, если транзакция зафиксирована или откатана, сеанс автоматически закроется. Но в следующем тестовом коде сеанс остается открытым.

ISession session = NHibernateHelper.GetCurrentSession();
using (ITransaction tx = hSession.BeginTransaction())
{
   try
   {
     WalletRecord walletRecord = new WalletRecord();
     //do something;
     session.Save(walletRecord);
     tx.Commit();
   }
   catch
   {
     tx.Rollback();
     Console.WriteLine(session.IsOpen);
     throw;
   }
 }

Это приводит к тому, что в случае возникновения исключения последующие вызовы выдают исключение, поскольку getCurrentSession возвращает тот же сеанс и основной кэш этот сеанс содержит ранее сгенерированные грязные данные.

Каковы оптимальные методы обработки исключений при использовании getCurrentSession?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...