2015-08-07 2 views
0

У меня есть проблема здесь, в мой рабочий процесс будет рад, если вы могли бы помочьNHibernate Session.save и transaction.Commit

using (var transaction = Session.BeginTransaction()) 
{ 
    try   
    { 
     obj1 = Session.Save(obj1); 
     obj2=Session.Save(obj2); 
     transaction.Commit(); 
    }    
    catch 
    { 
     transaction.Rollback(); 
    } 
    } 

Теперь сценарий, что obj1 будет сохранен, но obj2 выдает ошибку и транзакция откат.

Теперь, когда я запускаю новую операцию, в которой оба объекта obj1 и obj2 сохраняются, а когда транзакция совершает это, сохраняются obj1, obj2 и предыдущий obj1.
Пожалуйста, помогите мне справиться с этим.
Я не хочу сохранять предыдущие obj1

ответ

1

Вы должны закрыть и удалить сеанс, если он вызывает исключение или вам нужно откат. Вероятно, он сохраняет obj1, потому что как только сеанс вызывает исключение, сеанс находится в противоречивом состоянии.

Создать новую сессию и транзакцию.

Documentation

currentTransaction.Rollback();

Если вы откатите транзакцию, вы должны немедленно закрыть и отменить текущий сеанс, чтобы убедиться, что внутреннее состояние NHibernate согласовано.

9.8. Exception handling

Если ISession бросает исключение, вы должны немедленно откатить транзакцию, вызовите ISession.Close() и отбрасывать экземпляр ISession. Некоторые методы ISession не оставят сессию в согласованном состоянии.

Смежные вопросы