Как следует обрабатывать исключения NHibernate во время сеансов? Есть много примеров через Интернет:Свободное управление исключениями сеанса NHibernate
http://nhibernate.info/doc/nh/en/index.html#manipulatingdata-exceptions https://svn.code.sf.net/p/nhibernate/code/trunk/nhibernate/src/NHibernate/ISession.cs
И много, много StackOwerflow нитей, которые предлагают подход, аналогичный этому:
using (ISession session = factory.OpenSession())
using (ITransaction tx = session.BeginTransaction())
{
try
{
// do some work
...
tx.Commit();
}
catch (Exception e)
{
if (tx != null) tx.Rollback();
throw;
}
}
Но что, если происходит ошибка, и исключение составляет брошен на первую строку кода (когда вы открываете сеанс)? Ни один из примеров не прикрывает его!
colege мой мотивационные этот подход:
ITransaction transaction = null;
try
{
using (ISession session = databaseFacade.OpenSession())
{
transaction = session.BeginTransaction();
//do some work
...
transaction.Commit();
}
}
catch (Exception ex)
{
if (transaction != null)
transaction.Rollback();
throw new Exception(ex.Message);
}
правильно, что если OpenSession() генерирует исключение, транзакция делает не так, но как вы справляетесь с этим исключением? В вашем примере кода блок catch try не обрабатывал бы его. Или я чего-то не хватает? – Stralos
@SomeGuy, если 'OpenSession' терпит неудачу, не с чем работать, поскольку ничего еще не создано. Фактически единственное, что вам нужно сделать - это переосмыслить исключение, потому что, скорее всего, приложение не сможет работать – tchrikch