public virtual async Task Intercept_connection_with_multiple_interceptors(bool async)
        {
            var interceptor1 = new TransactionInterceptor();
            var interceptor2 = new WrappingTransactionInterceptor();
            var interceptor3 = new TransactionInterceptor();
            var interceptor4 = new WrappingTransactionInterceptor();

            using (var context = CreateContext(
                       new IInterceptor[]
            {
                new NoOpTransactionInterceptor(), interceptor1, interceptor2
            },
                       new IInterceptor[]
            {
                interceptor3, interceptor4, new NoOpTransactionInterceptor()
            }))
            {
                using (var contextTransaction = async
                    ? await context.Database.BeginTransactionAsync()
                    : context.Database.BeginTransaction())
                {
                    Assert.IsType <WrappedDbTransaction>(contextTransaction.GetDbTransaction());

                    AssertBeginTransaction(context, interceptor1, async);
                    AssertBeginTransaction(context, interceptor2, async);
                    AssertBeginTransaction(context, interceptor3, async);
                    AssertBeginTransaction(context, interceptor4, async);
                }
            }
        }
        public virtual async Task Intercept_connection_with_multiple_interceptors(bool async)
        {
            var interceptor1 = new TransactionInterceptor();
            var interceptor2 = new WrappingTransactionInterceptor();
            var interceptor3 = new TransactionInterceptor();
            var interceptor4 = new WrappingTransactionInterceptor();

            using var context = CreateContext(
                      new IInterceptor[] { new NoOpTransactionInterceptor(), interceptor1, interceptor2 },
                      new IInterceptor[] { interceptor3, interceptor4, new NoOpTransactionInterceptor() });
            using var listener           = Fixture.SubscribeToDiagnosticListener(context.ContextId);
            using var contextTransaction = async
                ? await context.Database.BeginTransactionAsync()
                : context.Database.BeginTransaction();

            Assert.IsType <WrappedDbTransaction>(contextTransaction.GetDbTransaction());

            AssertBeginTransaction(context, interceptor1, async);
            AssertBeginTransaction(context, interceptor2, async);
            AssertBeginTransaction(context, interceptor3, async);
            AssertBeginTransaction(context, interceptor4, async);

            AssertBeginTransactionEvents(listener);
        }