Nhibernate 使用OnTransactionCompleted事件确定ActiveRecord.TransactionScope是否成功

Nhibernate 使用OnTransactionCompleted事件确定ActiveRecord.TransactionScope是否成功,nhibernate,castle-activerecord,Nhibernate,Castle Activerecord,我正在使用以下代码使用CastleActiveRecordV1.0.3(eugh,legacy!)执行删除操作 问题是,由于TransactionMode.Inherits,允许此方法的使用者将对此方法的调用包装到自己的ActiveRecord.TransactionScope中。在这样做的情况下,异常不会发生在scope.VoteCommit()点,因此MethodCallBecauseOfSuccess()被错误调用 这是我正在使用的遗留代码,因此此时我无法重新使用使用的代码,我只能更改此方

我正在使用以下代码使用CastleActiveRecordV1.0.3(eugh,legacy!)执行删除操作

问题是,由于TransactionMode.Inherits,允许此方法的使用者将对此方法的调用包装到自己的ActiveRecord.TransactionScope中。在这样做的情况下,异常不会发生在scope.VoteCommit()点,因此MethodCallBecauseOfSuccess()被错误调用

这是我正在使用的遗留代码,因此此时我无法重新使用使用的代码,我只能更改此方法

因此,我现在查看TransactionScope.OnTransactionCompleted事件,这样,如果事务作用域消失在调用方法中,我仍然可以在它完成时捕获,并调用适当的方法,例如:

public void Delete(anObject instance)
{
    try
    {
        using (var scope = new TransactionScope(TransactionMode.Inherits, OnDispose.Rollback))
        {
            scope.OnTransactionCompleted += (sender, args) => 
                                        {
                                            //if FAIL
                                            MethodCallBecauseOfFailure();
                                            //else SUCCEED
                                            MethodCallBecauseOfSuccess();
                                        };

            ...(DB Operations)

            scope.VoteCommit();
        }
    }
    catch (NHibernate.TransactionException ex)
    {
        ...     
    }
}
不幸的是,我似乎无法确定TransactionScope是失败了还是成功了。匿名方法的参数是sender=父事务范围(我想!),args=empty。当然,我可以访问范围,即当前事务范围。可供检查的属性很少


有没有办法确定它是失败了还是成功了?

属性HassSessionError是否有帮助

try
{
    using (TransactionScope scope = new TransactionScope(TransactionMode.Inherits, OnDispose.Rollback))
    {
        scope.OnTransactionCompleted += (sender, args) => 
                                    {
                                        TransactionScope sender2 = (TransactionScope)sender;
                                        if(sender2.HasSessionError)
                                          MethodCallBecauseOfFailure();
                                        else
                                          MethodCallBecauseOfSuccess();
                                    };

        ...(DB Operations)

        scope.VoteCommit();
    }
}
catch (NHibernate.TransactionException ex)
{
    ...     
}
问候


Juy Juka

没有,不幸的是没有;它总是显示为
false
。我也尝试过用SessionScope包装所有内容,但仍然是错误的。
try
{
    using (TransactionScope scope = new TransactionScope(TransactionMode.Inherits, OnDispose.Rollback))
    {
        scope.OnTransactionCompleted += (sender, args) => 
                                    {
                                        TransactionScope sender2 = (TransactionScope)sender;
                                        if(sender2.HasSessionError)
                                          MethodCallBecauseOfFailure();
                                        else
                                          MethodCallBecauseOfSuccess();
                                    };

        ...(DB Operations)

        scope.VoteCommit();
    }
}
catch (NHibernate.TransactionException ex)
{
    ...     
}