public async Task Retries_BeginTransaction_on_execution_failure(bool async) { using (var context = CreateContext()) { var connection = (TestJetConnection)context.GetService <IJetRelationalConnection>(); connection.OpenFailures.Enqueue(new bool?[] { true }); Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); if (async) { var transaction = await new TestJetRetryingExecutionStrategy(context).ExecuteAsync( context, c => context.Database.BeginTransactionAsync()); transaction.Dispose(); } else { var transaction = new TestJetRetryingExecutionStrategy(context).Execute( context, c => context.Database.BeginTransaction()); transaction.Dispose(); } Assert.Equal(2, connection.OpenCount); Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); } }
public async Task Retries_query_on_execution_failure(bool externalStrategy, bool async) { CleanContext(); using (var context = CreateContext()) { context.Products.Add(new Product()); context.Products.Add(new Product()); context.SaveChanges(); } using (var context = CreateContext()) { var connection = (TestJetConnection)context.GetService <IJetRelationalConnection>(); connection.ExecutionFailures.Enqueue(new bool?[] { true }); Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); List <Product> list; if (async) { if (externalStrategy) { list = await new TestJetRetryingExecutionStrategy(context) .ExecuteAsync(context, (c, ct) => c.Products.ToListAsync(ct), null); } else { list = await context.Products.ToListAsync(); } } else { if (externalStrategy) { list = new TestJetRetryingExecutionStrategy(context) .Execute(context, c => c.Products.ToList(), null); } else { list = context.Products.ToList(); } } Assert.Equal(2, list.Count); Assert.Equal(1, connection.OpenCount); Assert.Equal(2, connection.ExecutionCount); Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); } }