1.7 KiB
1.7 KiB
Transactions and Disposal
DynamORM manages connections, command pools, and transaction stacks internally.
Connection and Transaction Options
DynamicDatabaseOptions controls behavior:
SingleConnectionSingleTransactionSupportSchemaSupportStoredProceduresSupportNoLockSupportTop/SupportLimitOffset/SupportFirstSkip
Typical setup:
var options =
DynamicDatabaseOptions.SingleConnection |
DynamicDatabaseOptions.SingleTransaction |
DynamicDatabaseOptions.SupportLimitOffset |
DynamicDatabaseOptions.SupportSchema;
Transaction Usage
using (var db = new DynamicDatabase(factory, connectionString, options))
using (var conn = db.Open())
using (var tx = conn.BeginTransaction())
using (var cmd = conn.CreateCommand())
{
cmd.SetCommand("UPDATE users SET first = 'Ada' WHERE id = 1").ExecuteNonQuery();
tx.Commit();
}
Global transaction mode is also available via db.BeginTransaction().
Disposal Guarantees
Current disposal behavior includes idempotent guards on key objects:
DynamicDatabaseDynamicConnectionDynamicCommandDynamicTransactionDynamicTable- builder and parser helpers
This prevents repeated cleanup from throwing or re-disposing lower-level resources.
Pooling and Rollback Behavior
Behavior validated by DynamORM.Tests/Helpers/PoolingTests.cs:
- Disposing the database invalidates active commands.
- Open transactions are rolled back during disposal when not committed.
Practices
- Prefer
usingblocks forDynamicDatabase, connections, commands, transactions, and builders. - Do not manually re-dispose the same object from multiple ownership paths unless
IsDisposedis checked. - Keep transaction scope short and explicit.