public void ShouldPreserveExistingTransaction()
        {
            using (var context = new TestDbContext(_connection))
                using (var transaction = context.Database.BeginTransaction())
                {
                    int methodCalls = 0;

                    context.ExecuteInTransaction(() =>
                    {
                        methodCalls++;

                        Assert.AreEqual(transaction, context.Database.CurrentTransaction);

                        return(0);
                    });

                    Assert.AreEqual(transaction, context.Database.CurrentTransaction);
                    Assert.AreEqual(1, methodCalls);
                }
        }
        public void ShouldCreateNewTransaction()
        {
            using (var context = new TestDbContext(_connection))
            {
                Assert.IsNull(context.Database.CurrentTransaction);

                int methodCalls = 0;

                context.ExecuteInTransaction(() =>
                {
                    methodCalls++;

                    Assert.IsNotNull(context.Database.CurrentTransaction);

                    return(0);
                });

                Assert.IsNull(context.Database.CurrentTransaction);
                Assert.AreEqual(1, methodCalls);
            }
        }
        public async Task ShouldPreserveExistingTransactionAsync()
        {
            using (var context = new TestDbContext(_connection))
                using (var transaction = context.Database.BeginTransaction())
                {
                    int methodCalls = 0;

                    await context.ExecuteInTransaction(async() =>
                    {
                        methodCalls++;

                        Assert.AreEqual(transaction, context.Database.CurrentTransaction);

                        await Task.Delay(1);

                        return(0);
                    });

                    Assert.AreEqual(transaction, context.Database.CurrentTransaction);
                    Assert.AreEqual(1, methodCalls);
                }
        }
        public async Task ShouldCreateNewTransactionAsync()
        {
            using (var context = new TestDbContext(_connection))
            {
                Assert.IsNull(context.Database.CurrentTransaction);

                int methodCalls = 0;

                await context.ExecuteInTransaction(async() =>
                {
                    methodCalls++;

                    Assert.IsNotNull(context.Database.CurrentTransaction);

                    await Task.Delay(1);

                    return(0);
                });

                Assert.IsNull(context.Database.CurrentTransaction);
                Assert.AreEqual(1, methodCalls);
            }
        }