AdoNetCore.AseClient icon indicating copy to clipboard operation
AdoNetCore.AseClient copied to clipboard

Add TransactionScope support

Open ratacolita opened this issue 3 weeks ago • 0 comments

Summary

This PR implements System.Transactions.TransactionScope support for AseConnection, addressing feature request #237.

Changes

  • New AseEnlistedTransaction class: Implements IEnlistmentNotification to participate in the two-phase commit protocol
  • EnlistTransaction(Transaction) method: Added to AseConnection for manual enlistment in System.Transactions
  • Auto-enlistment: Connection automatically enlists in Transaction.Current when Open() is called (if ambient transaction exists)
  • Enlist connection string parameter: Controls auto-enlistment behavior (default: true)

Usage

// Automatic enlistment (default behavior)
using (var scope = new TransactionScope())
{
    using (var connection = new AseConnection(connectionString))
    {
        connection.Open(); // Auto-enlists in ambient transaction
        // ... execute commands ...
    }
    scope.Complete();
}

// Disable auto-enlistment via connection string
var connectionString = "...;Enlist=false";

// Manual enlistment
connection.EnlistTransaction(Transaction.Current);

Supported Frameworks

  • .NET Framework 4.6+
  • .NET Standard 2.0
  • .NET Core 2.0+

Test Plan

  • [ ] Test basic TransactionScope commit scenario
  • [ ] Test TransactionScope rollback (no Complete() called)
  • [ ] Test explicit EnlistTransaction usage
  • [ ] Test Enlist=false disables auto-enlistment
  • [ ] Test error handling during Prepare/Commit/Rollback phases
  • [ ] Test connection pool behavior with enlisted connections

Fixes #237

🤖 Generated with Claude Code

ratacolita avatar Dec 19 '25 19:12 ratacolita