ChristopherT asked me if there is a way to determine whether a call to the
GetNewOrExistingAutoReadTransaction Methods did start a new DB Transaction, or whether the call 'piggy-backed' on an already running DB Transaction.
The answer is YES that is possible, but for the benefit of those of us who were used to the non-AutoTransaction-scheme Method
GetNewOrExistingTransaction I will provide a longer explanation!
The non-AutoTransaction-scheme Method
GetNewOrExistingTransaction Method overloads feature an out Argument, '
out bool ANewTransaction', so that's the way to tell that if you use those Methods.
When I introduced the AutoTransaction-scheme Methods
GetNewOrExistingAutoReadTransaction I found out that there is no need to expose that
bool Argument anymore as these AutoTransaction Methods (and all their overloads) internally deal with whatever the value of the
ANewTransaction Argument of the called
GetNewOrExistingTransaction Method overloads is, and so I reckoned I can leave out that out Argument --- If I would have implemented that
out Argument, all places where those Methods would get called would have needed to create a
bool Variable for that everywhere where those Methods are called.
But how to find out whether a new DB Transaction got started, or whether the Method 'piggy-backs' on an already running DB Transaction?
Easy, but different: I introduced a Property called '
Reused' on the
TDBTransaction Class. That allows code such as '
if (!MyTransaction.Reused)' to be written, which will return
true if a DB Transaction has been started by any of the GetNewOrExistingAuto(Read)Transaction Methods, and
false if those Methods 'piggy-backed' on an already running DB Transaction. As this Property can be inquired not only in the Method that called the the GetNewOrExistingAuto(Read)Transaction Method this is even more useful than the previous out Argument, esp. for DB Transaction handling when DB Transactions span several Methods!