public virtual async Task SaveChanges_uses_enlisted_transaction(bool async, bool autoTransactionsEnabled) { using (var transaction = new CommittableTransaction(TimeSpan.FromMinutes(10))) { using (var context = CreateContext()) { context.Database.EnlistTransaction(transaction); context.Database.AutoTransactionsEnabled = autoTransactionsEnabled; context.Add( new TransactionCustomer { Id = 77, Name = "Bobble" }); context.Entry(context.Set <TransactionCustomer>().OrderBy(c => c.Id).Last()).State = EntityState.Added; if (async) { await Assert.ThrowsAsync <DbUpdateException>(() => context.SaveChangesAsync()); } else { Assert.Throws <DbUpdateException>(() => context.SaveChanges()); } context.Database.AutoTransactionsEnabled = true; } if (AmbientTransactionsSupported) { Assert.Equal( RelationalResources.LogExplicitTransactionEnlisted(new TestLogger <TestRelationalLoggingDefinitions>()) .GenerateMessage("Serializable"), Fixture.ListLoggerFactory.Log.First().Message); } else { Assert.Equal( RelationalResources.LogAmbientTransaction(new TestLogger <TestRelationalLoggingDefinitions>()).GenerateMessage(), Fixture.ListLoggerFactory.Log.First().Message); if (!autoTransactionsEnabled) { using var context = CreateContext(); context.Entry(context.Set <TransactionCustomer>().Single(c => c.Id == 77)).State = EntityState.Deleted; if (async) { await context.SaveChangesAsync(); } else { context.SaveChanges(); } } } } AssertStoreInitialState(); }
public virtual async Task SaveChanges_uses_ambient_transaction(bool async, bool autoTransactionsEnabled) { if (TestStore.ConnectionState == ConnectionState.Closed) { TestStore.OpenConnection(); } using (TestUtilities.TestStore.CreateTransactionScope()) { using (var context = CreateContext()) { context.Database.AutoTransactionsEnabled = autoTransactionsEnabled; context.Add( new TransactionCustomer { Id = 77, Name = "Bobble" }); context.Entry(context.Set <TransactionCustomer>().OrderBy(c => c.Id).Last()).State = EntityState.Added; if (async) { await Assert.ThrowsAsync <DbUpdateException>(() => context.SaveChangesAsync()); } else { Assert.Throws <DbUpdateException>(() => context.SaveChanges()); } context.Database.AutoTransactionsEnabled = true; } if (AmbientTransactionsSupported) { Assert.Equal( RelationalResources.LogAmbientTransactionEnlisted(new TestLogger <TestRelationalLoggingDefinitions>()) .GenerateMessage("Serializable"), Fixture.ListLoggerFactory.Log.Skip(2).First().Message); } else { Assert.Equal( RelationalResources.LogAmbientTransaction(new TestLogger <TestRelationalLoggingDefinitions>()).GenerateMessage(), Fixture.ListLoggerFactory.Log.Skip(2).First().Message); using (var context = CreateContext()) { context.Entry(context.Set <TransactionCustomer>().Single(c => c.Id == 77)).State = EntityState.Deleted; if (async) { await context.SaveChangesAsync(); } else { context.SaveChanges(); } } } } AssertStoreInitialState(); }