Очистка означает, что NHibernate будет следить за тем, чтобы все изменения сохранялись в БД.То есть он будет следить за выполнением всех необходимых операторов SQL.Когда транзакция завершается неудачно и, таким образом, откатывается, все эти изменения будут отменены.Таким образом, я не вижу в этом проблемы (вы должны помнить, однако, что ваша сущность может быть не в допустимом состоянии, поскольку транзакция не удалась).
Но ... я не вижупроблема на самом деле: в случае сбоя нетранзакционной процедуры, в чем проблема?Поскольку процедура не транзакционная, я думаю, она не влияет на информацию, которая хранится в базе данных?Или, что делает этот код?
Если он не транзакционный, почему вы не можете сделать это за пределами своей рабочей единицы?
Когда сбой не удается сохранить, я думаю, выУбедитесь, что не только транзакция откатывается, но и исключение будет сгенерировано в стеке, пока не встретится обработчик ошибок, что, вероятно, означает, что ваш нетранзакционный код также не будет выполнен:
using( var transaction = session.BeginTransaction() )
{
repository.Save (entity);
transaction.Commit(); // error, exception is thrown.
}
NonTransactionalCode (entity); // this line will not be executed, since the exception will be thrown up the stack until a suitable catch block is encountered.