diff --git a/src/TableManager.php b/src/TableManager.php
index e17e9ad2af5f6a2f74bd418dc2806989f430e9ec..98ab1507ca5da928bcaac803836844b60636481a 100644
--- a/src/TableManager.php
+++ b/src/TableManager.php
@@ -4,7 +4,7 @@ declare(strict_types=1);
 
 namespace Grifart\Tables;
 
-use Dibi\Connection;
+use Dibi\IConnection;
 use Dibi\UniqueConstraintViolationException;
 use Grifart\Tables\Conditions\Composite;
 use Grifart\Tables\Conditions\Condition;
@@ -21,7 +21,7 @@ final class TableManager
 {
 
 	public function __construct(
-		private Connection $connection,
+		private IConnection $connection,
 	) {}
 
 	/**
@@ -242,4 +242,24 @@ final class TableManager
 		// UPDATE:
 		$this->update($table, $changes);
 	}
+
+	/**
+	 * @template T
+	 * @param \Closure(): T $block
+	 * @return T
+	 */
+	public function withConnection(
+		IConnection $connection,
+		\Closure $block,
+	): mixed
+	{
+		$previousConnection = $this->connection;
+		$this->connection = $connection;
+
+		try {
+			return $block();
+		} finally {
+			$this->connection = $previousConnection;
+		}
+	}
 }