public virtual void UseTransaction_throws_if_enlisted_in_transaction() { if (!AmbientTransactionsSupported) { return; } using (var t = new CommittableTransaction(TimeSpan.FromMinutes(10))) { using (var transaction = TestStore.BeginTransaction()) { using (var context = CreateContextWithConnectionString()) { context.Database.OpenConnection(); context.Database.EnlistTransaction(t); var ex = Assert.Throws <InvalidOperationException>( () => context.Database.UseTransaction(transaction)); Assert.Equal(RelationalStrings.ConflictingEnlistedTransaction, ex.Message); context.Database.CloseConnection(); } } } }
public virtual void UseTransaction_will_not_dispose_external_transaction() { using var transaction = TestStore.BeginTransaction(); using var context = CreateContext(); context.Database.UseTransaction(transaction); context.Database.GetService <IRelationalConnection>().Dispose(); Assert.NotNull(transaction.Connection); }
public virtual void UseTransaction_throws_if_mismatched_connection() { using var transaction = TestStore.BeginTransaction(); using var context = CreateContextWithConnectionString(); var ex = Assert.Throws <InvalidOperationException>( () => context.Database.UseTransaction(transaction)); Assert.Equal(RelationalStrings.TransactionAssociatedWithDifferentConnection, ex.Message); }
public virtual void UseTransaction_throws_if_another_transaction_started() { using var transaction = TestStore.BeginTransaction(); using var context = CreateContextWithConnectionString(); using (context.Database.BeginTransaction( DirtyReadsOccur ? IsolationLevel.ReadUncommitted : IsolationLevel.Unspecified)) { var ex = Assert.Throws <InvalidOperationException>( () => context.Database.UseTransaction(transaction)); Assert.Equal(RelationalStrings.TransactionAlreadyStarted, ex.Message); } }
public virtual void UseTransaction_throws_if_another_transaction_started() { using (var transaction = TestStore.BeginTransaction()) { using (var context = CreateContextWithConnectionString()) { using (context.Database.BeginTransaction()) { var ex = Assert.Throws <InvalidOperationException>( () => context.Database.UseTransaction(transaction)); Assert.Equal(RelationalStrings.TransactionAlreadyStarted, ex.Message); } } } }
public virtual void UseTransaction_throws_if_ambient_transaction_started() { if (!AmbientTransactionsSupported) { return; } using (TestUtilities.TestStore.CreateTransactionScope()) { using var transaction = TestStore.BeginTransaction(); using var context = CreateContextWithConnectionString(); var ex = Assert.Throws <InvalidOperationException>( () => context.Database.UseTransaction(transaction)); Assert.Equal(RelationalStrings.ConflictingAmbientTransaction, ex.Message); } }
public virtual async Task Can_use_open_connection_with_started_transaction(bool autoTransaction) { using (var transaction = TestStore.BeginTransaction()) { using (var context = CreateContext()) { context.Database.AutoTransactionsEnabled = autoTransaction; context.Database.UseTransaction(transaction); context.Entry(context.Set <TransactionCustomer>().OrderBy(c => c.Id).First()).State = EntityState.Deleted; await context.SaveChangesAsync(); } } AssertStoreInitialState(); }