Skip to content

Transactions

Bavard's database operations can be executed within a transaction to ensure data integrity.

Using Transactions

Use the DatabaseManager().transaction method.

dart
await DatabaseManager().transaction((txn) async {
  final user = User();
  user.name = 'Mario';
  await user.save(); // Uses the transaction automatically

  final profile = Profile();
  profile.userId = user.id;
  await profile.save();

  // If an exception is thrown here, both User and Profile inserts are rolled back.
  throw Exception('Something went wrong');
});

Transaction Context

The transaction callback receives a TransactionContext (txn). If you are using raw SQL queries within the transaction, use this context:

dart
await DatabaseManager().transaction((txn) async {
  await txn.execute('INSERT INTO logs ...');
});

However, Model operations (save, delete, query) automatically detect the active transaction on the DatabaseManager, so you don't need to pass the context explicitly to them.

Released under the MIT License. Crafted with ❤️ for the Dart ecosystem.