public class CustomerRepository

{

    private readonly string connectionString;


    public CustomerRepository(string connectionString)

    {

        this.connectionString = connectionString;

    }


    public void Add(Customer customer)

    {

        using (var connection = new SqlConnection(connectionString))

        {

            // 데이터베이스 작업 수행

            // ...

        }

    }

}



[ServiceBehavior(TransactionIsolationLevel = IsolationLevel.Serializable, TransactionTimeout = "00:00:30")]

public class CustomerService

{

    private readonly CustomerRepository customerRepository;

    private readonly OrderRepository orderRepository;

    private readonly ProductRepository productRepository;


    public CustomerService(string connectionString)

    {

        customerRepository = new CustomerRepository(connectionString);

        orderRepository = new OrderRepository(connectionString);

        productRepository = new ProductRepository(connectionString);

    }


    [OperationBehavior(TransactionScopeRequired = true)]

    public void PerformTransactionalOperation()

    {

        using (var scope = new TransactionScope())

        {

            try

            {

                // Customer 추가 작업

                customerRepository.Add(customer);


                // Order 추가 작업

                orderRepository.Add(order);


                // Product 추가 작업

                productRepository.Add(product);


                // 모든 작업이 성공적으로 완료되면 트랜잭션 커밋

                scope.Complete();

            }

            catch (Exception ex)

            {

                // 예외 처리

                throw new FaultException($"{ex.Message}");

            }

        }

    }

}




해당 방법으로 트랜잭션 처리시 잘 작동할까요?


제 생각에 리포지터리 안에서 using문으로 연결을 끊고 있어서 한 단위로 처리될 것 같아 보이지는 않는데,

트랜잭션 스코프를 정해주면 이 상황에서 한 단위로 작동이 되는건지 궁금합니다!