public void transaction_controller_implicitly_opens_the_connection() { using (var ctx = new SqlTransactionCallContext(TestHelper.Monitor)) { var controller = ctx.GetConnectionController(TestHelper.GetConnectionString()); BeginTranAndCommit(controller); controller.Connection.State.Should().Be(ConnectionState.Closed); // Explicit openening. using (controller.ExplicitOpen()) { BeginTranAndCommit(controller); controller.Connection.State.Should().Be(ConnectionState.Open); } controller.Connection.State.Should().Be(ConnectionState.Closed); } void BeginTranAndCommit(ISqlConnectionTransactionController controller) { ISqlTransaction tran = controller.BeginTransaction(); controller.Connection.State.Should().Be(ConnectionState.Open); tran.IsNested.Should().BeFalse(); tran.Status.Should().Be(SqlTransactionStatus.Opened); tran.Commit(); tran.Status.Should().Be(SqlTransactionStatus.Committed); tran.Invoking(t => t.Dispose()).Should().NotThrow(); } }