public async Task GetOpenConnection_InsideNestedRequiredTransactionScope_ReturnsTheSameInstance() { using (var transactionScope = new LocalTransactionScope()) { using var connectionProvider1 = new MockDbConnectionProvider(); var connection1 = connectionProvider1.Connection; using (var nestedTransactionScope = new LocalTransactionScope()) { using var connectionProvider2 = new MockDbConnectionProvider(); var connection2 = connectionProvider2.Connection; await Task.Delay(0); using var connectionProvider3 = new MockDbConnectionProvider(); var connection3 = connectionProvider3.Connection; Assert.Same(connection2, connection3); Assert.Same(connection1, connection2); nestedTransactionScope.Complete(); } using var connectionProvider4 = new MockDbConnectionProvider(); var connection4 = connectionProvider4.Connection; Assert.Same(connection1, connection4); transactionScope.Complete(); } }
public async Task GetOpenConnection_InsideNestedSuppressTransactionScope_AlwaysReturnsNewInstanceInNestedScope() { using (var transactionScope = new LocalTransactionScope()) { using var connectionProvider1 = new MockDbConnectionProvider(); var connection1 = connectionProvider1.Connection; using (var nestedTransactionScope = new LocalTransactionScope(TransactionScopeOption.Suppress)) { using var connectionProvider2 = new MockDbConnectionProvider(); var connection2 = connectionProvider2.Connection; await Task.Delay(0); using var connectionProvider3 = new MockDbConnectionProvider(); var connection3 = connectionProvider3.Connection; Assert.NotSame(connection2, connection3); Assert.NotSame(connection1, connection2); nestedTransactionScope.Complete(); } using var connectionProvider4 = new MockDbConnectionProvider(); var connection4 = connectionProvider4.Connection; Assert.Same(connection1, connection4); transactionScope.Complete(); } }
public async Task GetOpenConnection_InsideSuppressTransactionScope_AlwaysReturnsNewInstance() { using var transactionScope = new LocalTransactionScope(TransactionScopeOption.Suppress); using var connectionProvider1 = new MockDbConnectionProvider(); var connection1 = connectionProvider1.Connection; await Task.Delay(0); using var connectionProvider2 = new MockDbConnectionProvider(); var connection2 = connectionProvider2.Connection; Assert.NotSame(connection1, connection2); transactionScope.Complete(); }
public async Task GetOpenConnection_InsideRequiresNewTransactionScope_ReturnsTheSameInstance() { using var transactionScope = new LocalTransactionScope(TransactionScopeOption.RequiresNew); using var connectionProvider1 = new MockDbConnectionProvider(); var connection1 = connectionProvider1.Connection; await Task.Delay(0); using var connectionProvider2 = new MockDbConnectionProvider(); var connection2 = connectionProvider2.Connection; Assert.Same(connection1, connection2); transactionScope.Complete(); }
public async Task <long> CreateOrder(CreateOrderRequest createOrderRequest) { using var transactionScope = new LocalTransactionScope(); using var connection = SqlConnectionFactory.GetOpenConnection(_dataAccessOptions.Value.ConnectionString); using var command = connection.CreateCommand(); command.CommandText = $@"INSERT INTO Orders (ProductId, Quantity) output INSERTED.Id VALUES (@productId, @quantity)"; command.Parameters.Add("productId", SqlDbType.NVarChar, 100).Value = createOrderRequest.ProductId; command.Parameters.Add("quantity", SqlDbType.Int).Value = createOrderRequest.Quantity; var id = (long)await command.ExecuteScalarAsync(); await _bus.Publish(new OrderCreated { Id = id, ProductId = createOrderRequest.ProductId, Quantity = createOrderRequest.Quantity }); transactionScope.Complete(); return(id); }