а моей проблемы: У меня есть метод, как:Откат транзакции в хранилище из другого класса
class Manager
{
void method1()
{
// save object in database to get ID
int newId = this.Repository.Save(obj);
try {
// call remote webservice to save another object with same ID as in local DB
webservice.Save(remoteObj, id);
}
catch(Exception e)
{
// do Rollback in Repository here
}
}
}
Bassically это код. Репозиторий использует NHibernate для сохранения в БД. Мне нужно сохранить в БД, чтобы узнать новый идентификатор, а затем отправить этот идентификатор в webservice. Если что-то не вызвало вызов webservice, я хочу откат и отбросить сохраненный объект .... и вот моя проблема. Я не могу открыть и контролировать транзакцию в репозитории из моего диспетчера классов.
Я уже попробовать с этим также:
class Manager
{
void method1()
{
using (TransactionScope scope = new TransactionScope())
{
// save object in database to get ID
int newId = this.Repository.Save(obj);
// call remote webservice to save another object with same ID
// as in local DB
webservice.Save(remoteObj, id);
scope.Complete();
}
}
}
Здесь проблема в том, что откат в порядке, но не Сохранить (Создать в NHibernate). Я получаю ошибку об этом объекте «Транзакция» не найден или транзакция уже закрыта сразу после строки: «scope.Complete();».
Я думаю, что что-то не так пытается контролировать транзакцию NHibernate с TransactionScope.
Я не знаю, если проблема с подходом, возможно, для справки этой ситуации нужно использовать другой способ ... ??
любая помощь или идея, где найти ??
Большое спасибо!
вы могли бы разместить код в хранилище? –