我的问题是: 我有一个方法:
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保存到DB。我需要保存在DB中以了解新ID,然后将此ID发送到webservice。如果调用webservice失败了,我想回滚并丢弃保存的对象....这是我的问题。我无法从类Manager中打开并控制Repository中的事务。
我也尝试过这个:
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();
}
}
}
这里的问题是回滚是OK但不是Save(在NHibernate中创建)。我得到关于该对象的错误“事务”未找到或事务已在行之后关闭:“scope.Complete();”。
我认为尝试使用TransactionScope控制NHibernate事务是错误的。
我不知道是否是关于进场的问题,也许应该采用另一种方式来处理这种情况...... ??
任何帮助或想法在哪里找到??
非常感谢!!
答案 0 :(得分:0)
假设您已经在CurrentSession属性/变量中打开了一个会话,并且您可以将该工作会话传递到您的存储库,我会执行以下操作:
using(var trx = CurrentSession.BeginTransaction())
{
try
{
int newId = this.Repository.Save(obj, CurrentSession);
webservice.Save(remoteObj, id);
trx.Commit();
}
catch
{
trx.Rollback();
}
}