Handling Business Object Exceptions Gracefully

I’ve been running into issues when attempting to catch Exceptions from Business Object calls via external C# dlls (extending ContextBoundBase). I would like to be able to catch the exceptions and move on, with the ErpContext connection still being usable, however, it seems that these exceptions cause the current transaction to complete.

On subsequent BO calls or writes to the db after catching the BO exception, another exception “The transaction associated with the current connection has completed but has not been disposed.” is thrown.

I can provide specific code if needed, but the general paradigm we use is:

try
{
    using (var svcContract = Ice.Assemblies.ServiceRenderer.GetService<...>(Db))
    {
        // svcContract may throw an exception here that we wish to catch, typically on .Update
    }
}
catch (Exception ex)
{
    // attempt to write the Exception to a table in the database (i.e. UD100)
    Db.Validate(); // this is where the transaction completed but not disposed exception is thrown
}

Anyone ran into this issue before or know the proper way to handle Exceptions thrown by Business Object calls? I’ve searched pretty extensively and can’t find anything related to this.